AAOS Hata Ayıklama Kısıtlama Denetleyicisini (DRC) entegre etmek için bu sayfadaki talimatları kullanın.
Şekil 1. DRC uygulaması örneği.
Mimari
DRC mimarisi Şekil 2'de gösterilmektedir. Kırmızıyla özetlenen bileşenler (token veren kuruluş ve DRC), özelleştirebileceğiniz referans uygulamalara eşlik eder.
Şekil 2. DRC mimarisi.
DRC nedir?
Araç ana ünitesi DRC uygulamasını içerir ( packages/apps/Car/DebuggingRestrictionController
içindeki referans uygulamaya bakın). Referans uygulaması, belirteci veren kuruluştan erişim belirteci alma, belirteci doğrulama ve ardından belirteçte belirtildiği şekilde hata ayıklama kısıtlaması değişikliklerini uygulama mantığını içerir. Mantık, araç tarafındaki temel UX öğelerini içerir.
Token veren kuruluş nedir?
Bu, kriptografik olarak imzalanmış erişim belirteçleri yayınlayan bir web hizmetidir ( packages/apps/Car/DebuggingRestrictionController/server
içindeki referans uygulamasına bakın). Referans web hizmeti, dağıtılabilir bir Firebase Bulut işlevidir (daha fazla bilgi edinmek için bkz . Firebase için Bulut İşlevleri ).
Önkoşullar
Referans uygulamasını dağıtmadan önce aşağıdaki görevleri tamamladığınızdan emin olun.
Erişim belirteçlerini imzalamak için sertifikaları hazırlayın
Belirteç veren kuruluş, erişim belirteçleri olarak JSON Web İmzalarını (JWS) oluşturur. Optimum uyumluluk için referans veren kuruluş yalnızca RS256 algoritmasını (SHA256'lı RSA imzaları) destekler. Anahtar rotasyonunu kolaylaştırmak amacıyla erişim belirteçlerini imzalamak için tek bir sertifika yerine bir sertifika zinciri kullanın. Tipik bir sertifika zinciri, bir kök CA sertifikası, bir ara CA sertifikası ve bir son varlık sertifikasından oluşmalıdır.
JWS belirteçlerini imzalayan son varlık sertifikası, standart TLS sertifikasından farklı değildir. DigiCert gibi genel CA'lardan bir sertifika satın alabilir veya kendinden imzalı kök CA sertifikalarını veya Donanım Güvenliği Modüllerini kullanarak kendi sertifika zincirinizi koruyabilirsiniz. Son varlık sertifikası, Konu Alternatif Adı (SAN) uzantısına sahip bir X509v3 sertifikası olmalıdır. SAN uzantısı, belirteci verenin bir tanımlayıcısını (örneğin ana bilgisayar adı) içerir. Son olarak, belirteç veren kuruluş yalnızca RS256'yı desteklediğinden, EC sertifikalarına göre RSA sertifikaları tercih edilmelidir.
Google packages/apps/Car/DebuggingRestrictionController/server/genkey.sh
kendinden imzalı sertifikalar oluşturmak için bir kabuk komut dosyası sağlar.
Firebase'i kurun
Referans jetonu veren kuruluş, Firebase Authentication ve Firebase Cloud Function'ı kullanır.
Firebase hesabınızı kurmak için:
- Firebase projesi oluşturmak için Firebase'i Android projenize ekleme konusuna bakın.
- Bazı Firebase kimlik doğrulayıcılarını etkinleştirmek için bkz. Firebase Kimlik Doğrulamasına nereden başlayabilirim? .
- Boş bir Firebase Cloud işlevi eklemek için bkz . Başlarken .
- Henüz yapmadıysanız, belirteç vereni derleyip dağıtmak için
Node.js
, NPM ve Firebase araçlarını yükleyin.
DRC uygulamasını entegre edin
Referans DRC uygulaması packages/apps/Car/DebuggingRestrictionController
konumunda bulunur. Uygulama, Soong ile AOSP'de paket halinde oluşturulabilir veya Gradle ile paketten çıkarılabilir .
Paketlenmiş yapı
Paketlenmiş bir uygulama oluşturmak için:
-
applicationId
,projectId
veapiKey
google-services.json
packages/apps/Car/DebuggingRestrictionController/soong/FirebaseApplication.java
içine kopyalayın. Bunu yapmak DRC uygulamasının Firebase'e doğru şekilde bağlanmasını sağlar. - Bu sabitleri
packages/apps/Car/DebuggingRestrictionController/soong/BuildConfig.java
dosyasında güncelleyin:-
TOKEN_USES_SELF_SIGNED_CA
, kendinden imzalı kök CA sertifikalarının kullanılıp kullanılmadığını gösterir. Etkinleştirilirse DRC uygulaması yalnızcaROOT_CA_CERT
belirtilen PEM kodlu kök CA sertifikasına güvenir. -
TOKEN_ISSUER_API_NAME
, Firebase Bulut işlevinin adıdır ve daha önce Firebase Konsolunda oluşturduğunuz Bulut işleviyle eşleşmelidir. -
TOKEN_ISSUER_HOSTNAME
erişim belirteçlerini imzalayacak son varlık sertifikasındaki Konu Alternatif Adıyla eşleşmelidir. -
DRC_TEST_EMAIL
veDRC_TEST_PASSWORD
, E-posta/Şifre ile oturum açmayı etkinleştirdiyseniz Firebase'de önceden hazırlanabilen isteğe bağlı bir test hesabının kimlik bilgileridir. Bunlar yalnızca aletli testler için kullanılır.
-
Uygulama artık Firebase hesabınızı ve sertifikalarınızı kullanacak şekilde yapılandırılmıştır. Android 9 ve sonraki sürümlerde ayrıcalıklı izin izin verilenler listesine eklemeyi ayarlamanız gerekir. İzin verilenler listesi en az android.permission.MANAGE_USERS
içermelidir. Örneğin:
<permissions> <privapp-permissions package="com.android.car.debuggingrestrictioncontroller"> <permission name="android.permission.INTERNET"/> <permission name="android.permission.MANAGE_USERS"/> </privapp-permissions> </permissions>
Paketlenmemiş yapı
Paketlenmemiş DRC yapıları, uygulamayı derlemek için Gradle'ı kullanır.
Paketlenmemiş bir yapı oluşturmak için:
- Android SDK'yı yüklediğinizi doğrulayın.
- Uygulamanın kök dizininde
local.properties
adlı bir metin dosyası oluşturun. - Android SDK'nın konumunu ayarlayın:
sdk.dir=path/to/android/sdk
- Firebase'i kurmak için
google-services.json
dosyasınıpackages/apps/Car/DebuggingRestrictionController/app
dosyasına kopyalayın. Gradle dosyayı ayrıştırır ve geri kalanını otomatik olarak ayarlar. - Ortam değişkenlerini tanımlayın. Paketlenmiş yapılarda olduğu gibi şunları belirtmeniz gerekir:
-
$TOKEN_USES_SELF_SIGNED_CA
: doğru veya yanlış; -
$ROOT_CA_CERT
: PEM kodlu kök CA sertifikasının yolu; -
$TOKEN_ISSUER_API_NAME
: Firebase Bulut işlevinin adı; -
$TOKEN_ISSUER_HOST_NAME
: Sertifikadaki SAN; -
$DRC_TEST_EMAIL
ve$DRC_TEST_EMAI
L: test hesabı için kimlik bilgileri, yalnızca hata ayıklama derlemeleri.
-
- Uygulamayı Gradle ile oluşturmak için şuna benzer bir komut çalıştırın:
$ ./gradlew build
Token veren kuruluşu entegre edin
Referans belirteci veren kuruluş, Node.js
uygulanan bir Firebase Bulut İşlevidir. İşlev yalnızca kimliği doğrulanmış bir kullanıcı tarafından çağrılabilir. Uygulamayı dağıtmadan önce JWS belirteçlerini imzalamak için kullanılan özel anahtarı ve sertifikaları ayarlamanız gerekir.
- Bir JSON dosyasını aşağıdaki içeriklerle doldurun:
{ "key": "---BEGIN PRIVATE KEY---\nRSA_PRIVATE_KEY\n-----END PRIVATE KEY-----\n", "certificates.0": "-----BEGIN CERTIFICATE-----\nTOKEN_SIGNING_CERT\n-----END CERTIFICATE-----\n", "certificates.1": "-----BEGIN CERTIFICATE-----\nINTERMEDIATE_CA_CERT\n-----END CERTIFICATE-----\n", "certificates.2": "-----BEGIN CERTIFICATE-----\nROOT_CA_CERT\n-----END CERTIFICATE-----\n", "expiration": "30m", "issuer": "Debugging Access Token Issuer", "audience": "IHU" }
Sertifikalar, önce son varlık sertifikası ve sonda kök CA sertifikası olacak şekilde sıralanır. Sona erme süresi özelleştirilebilir ve verilen bir tokenın DRC uygulaması tarafından alınıp tüketilmesi biraz zaman alırsa daha uzun bir süreye ayarlanabilir. Jeton iptali desteklenmiyor.
- Yapılandırmayı Firebase'e yükleyin:
- Firebase Cloud işlevini dağıtın:
- Belirteç veren kuruluşunuzu yönetmek ve izlemek için bkz . İşlev dağıtımını ve çalışma zamanı seçeneklerini yönetme .
$ firebase functions:config:set api_config="$(cat YOUR_CONFIG.json)"
$ firebase deploy --only functions
Varsayılan kısıtlamaları ayarlayın
İlk önyüklemeden önce varsayılan kısıtlamalar uygulanabilir. Android çerçevesindeki varsayılanları geçersiz kılmak için bunu statik kaynak katmanlarıyla yapın. Kısıtlamalar sırasıyla farklı kullanıcı türlerine uygulanabilir. Farklı kullanıcı türleri hakkında bilgi edinmek için Çoklu Kullanıcı Desteği'ne bakın.
Başsız sistem kullanıcısı için varsayılan kısıtlama frameworks/base/core/res/res/values/config.xml
dosyasındaki config_defaultFirstUserRestrictions
dize dizisiyle yapılandırılabilir. Bu kısıtlamanın ayarlanması, kısıtlama kaldırılana kadar Android Hata Ayıklama Köprüsü'nü (ADB) otomatik olarak devre dışı bırakır; örneğin:
<string-array translatable="false" name="config_defaultFirstUserRestrictions"> <item>no_debugging_features</item> </string-array>
Normal kullanıcılar (örneğin sürücüler ve yolcular) ve konuklar için varsayılan kısıtlamalar, frameworks/base/core/res/res/xml/config_user_types.xml
dosyasında yapılandırılabilir. Her bir kullanıcı türüne ilişkin varsayılan kısıtlamaları sırasıyla ayarlamak için bu dizeleri üst üste yerleştirebilirsiniz, örneğin:
<user-types> <full-type name="android.os.usertype.full.SECONDARY" > <default-restrictions no_debugging_features="true"/> </full-type> <full-type name="android.os.usertype.full.GUEST" > <default-restrictions no_debugging_features="true"/> </full-type> </user-types>