AAOS Hata Ayıklama Kısıtlaması Denetleyicisi'ni entegre etmek için bu sayfadaki talimatları kullanın. (DKC).
Şekil 1. DRC uygulama örneği.
Mimari
DRC mimarisi Şekil 2'de gösterilmektedir. Kırmızıyla gösterilen bileşenler (jetonu veren ve DRC) size eşlik eden referans uygulamaları bulunur. Bu uygulamaları özelleştirebilirsiniz.
Şekil 2. DRC mimarisi.
Demokratik Kongo Cumhuriyeti nedir?
Araba ana birimi, DRC uygulamasını içerir (referans uygulamaya şuradan bakın:
packages/apps/Car/DebuggingRestrictionController
) bilgileri gösterilir. Referans uygulamanın içeriği:
jetonu veren kuruluştan erişim jetonu alma, jetonu doğrulama ve jetonları doğrulama mantığı
Ardından, jetonda belirtilen şekilde hata ayıklama kısıtlama değişikliklerini uygulayın. Mantık,
araba tarafında temel kullanıcı deneyimi öğeleri.
Jetonu veren kuruluş nedir?
Bu, kriptografik olarak imzalanmış erişim jetonları veren bir web hizmetidir (bkz.
(packages/apps/Car/DebuggingRestrictionController/server
içindeki işlemler) ekleyebilirsiniz.
Referans web hizmeti, dağıtılabilir bir Firebase Cloud işlevidir (daha fazla bilgi edinmek için
Şunun için Cloud Functions:
Firebase) seçin.
Ön koşullar
Referans uygulamasını dağıtmadan önce aşağıdaki görevleri tamamladığınızdan emin olun.
Erişim jetonlarını imzalamak için sertifikalar hazırlama
Jetonu veren kuruluş, erişim jetonları olarak JSON Web İmzaları (JWS) oluşturur. Optimum için referans veren kuruluş yalnızca RS256 algoritmasını (SHA256 ile RSA imzaları) destekler. Anahtar rotasyonunu kolaylaştırmak için, imzalanırken tek bir sertifika yerine bir sertifika zinciri kullanın erişim jetonlarıdır. Tipik bir sertifika zinciri bir kök CA sertifikası, bir ara CA sertifikası ve bir son varlık sertifikası.
JWS jetonlarını imzalayan son varlık sertifikası, standart bir TLS'den farklı değildir sertifikası. DigiCert gibi genel CA'lardan bir sertifika satın alabilir veya kendi sertifika zincirinizi oluşturarak kendinden imzalı kök CA sertifikalarını veya Donanım Güvenlik Modüllerini kullanabilirsiniz. Son varlık sertifikası, Konu Alternatif Adı olan bir X509v3 sertifikası olmalıdır (SAN) uzantısından yararlanın. SAN uzantısı, jetonun tanımlayıcısını (örneğin, ana makine adı) içerir sağlayan taraftır. Son olarak, RSA sertifikaları EC sertifikaları yerine kart veren kuruluş yalnızca RS256'yı destekler.
Google, kendinden imzalı sertifikaları oluşturmak için bir kabuk komut dosyası sağlar
packages/apps/Car/DebuggingRestrictionController/server/genkey.sh
Firebase'i ayarlayın
Referans jetonu veren kuruluş, Firebase Authentication ve Firebase Cloud Functions işlevi.
Firebase hesabınızı oluşturmak için:
- Firebase projesi oluşturmak için şuraya bakın: Firebase'i şuraya ekle: ekleyebilirsiniz.
- Bazı Firebase kimlik doğrulayıcılarını etkinleştirmek için Nereden Firebase Authentication ile başlamak ister misiniz?.
- Boş bir Firebase Cloud işlevi eklemek için Başlatıldı.
- Henüz yapmadıysanız derleme yapmak için
Node.js
, NPM ve Firebase araçlarını yükleyin ve Jetonu vereni dağıtabilir.
DRC uygulamasını entegre edin
Referans DRC uygulaması şuradadır:
packages/apps/Car/DebuggingRestrictionController
Uygulama geliştirilebilir.
paket ve AOSP'de Soong veya
Gradle ile gruplandırılmamış.
Paket derleme
Paket halinde sunulan bir uygulama oluşturmak için:
applicationId
,projectId
veapiKey
öğelerini kopyalayıngoogle-services.json
dilinden şu dile:packages/apps/Car/DebuggingRestrictionController/soong/FirebaseApplication.java
. Bu sayede DRC uygulaması Firebase'e doğru şekilde bağlanabilir.- Bu sabit değerleri
packages/apps/Car/DebuggingRestrictionController/soong/BuildConfig.java
:TOKEN_USES_SELF_SIGNED_CA
, kendinden imzalı kök CA sertifikalarının kullanılır. Bu ayar etkinleştirilirse DRC uygulaması yalnızca şu adreste belirtilen PEM kodlu kök CA sertifikasına güvenir:ROOT_CA_CERT
TOKEN_ISSUER_API_NAME
, Firebase Cloud işlevinin adıdır ve Firebase konsolunda daha önce oluşturduğunuz Cloud işleviyle eşleştirin.TOKEN_ISSUER_HOSTNAME
, alan adındaki Konu Alternatif Adı ile eşleşmelidir son varlık sertifikasının yerini alır.DRC_TEST_EMAIL
veDRC_TEST_PASSWORD
, şunun kimlik bilgileridir: etkinleştirdiyseniz Firebase'de önceden temel hazırlığı yapılabilecek isteğe bağlı test hesabı E-posta/Şifre ile oturum açın. Bunlar yalnızca araçlı 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ı izinleri izin verilenler listesine ekleme hakkında daha fazla bilgi edinin.
İzin verilenler listesi en az android.permission.MANAGE_USERS
içermelidir. Örnek:
<permissions> <privapp-permissions package="com.android.car.debuggingrestrictioncontroller"> <permission name="android.permission.INTERNET"/> <permission name="android.permission.MANAGE_USERS"/> </privapp-permissions> </permissions>
Gruplandırılmamış derleme
Gruplandırılmamış DRC derlemeleri, uygulamayı derlemek için Gradle'ı kullanır.
Gruplandırılmamış bir derleme oluşturmak için:
- Android SDK'sını yüklediğinizi onaylayı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 ayarlamak için
google-services.json
dosyasını kopyalayıppackages/apps/Car/DebuggingRestrictionController/app
. Gradle, dosyayı ayrıştırır ve gerisini otomatik olarak ayarlar. - Ortam değişkenlerini tanımlayın. Paketlenmiş derlemelerde olduğu gibi:
$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 Cloud işlevinin adı;$TOKEN_ISSUER_HOST_NAME
: Sertifikadaki SAN;$DRC_TEST_EMAIL
ve$DRC_TEST_EMAI
L: Test için kimlik bilgileri yalnızca hata ayıklama derlemelerinde kullanılabilir.
- Uygulamayı Gradle ile derlemek için aşağıdaki gibi bir komut çalıştırın:
$ ./gradlew build
.
Jetonu veren kuruluşu entegre edin
Referans jetonunu veren, Node.js
bölgesinde uygulanmış bir Firebase Cloud Functions işlevidir.
İşlev yalnızca kimliği doğrulanmış bir kullanıcı tarafından çağrılabilir. Uygulamayı dağıtmadan önce şunları ayarlamanız gerekir:
JWS jetonlarını imzalamak için kullanılan özel anahtarı ve sertifikaları kaydetmelisiniz.
- 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 kök CA sertifikasıyla sıralanır tercih edebilirsiniz. Süre son tarihi özelleştirilebilir ve geçerliyse daha uzun bir süreye ayarlanabilir. jetonun alınıp bir DRC uygulaması tarafından kullanılması biraz zaman alır. Jeton iptali desteklenmez.
- Yapılandırmayı Firebase'e yükleyin:
- Firebase Cloud işlevini dağıtın:
- Jeton vereninizi yönetmek ve izlemek için şuraya bakın: Yönet işlevleri için dağıtım ve çalışma zamanı seçeneklerini inceleyin.
$ firebase functions:config:set api_config="$(cat YOUR_CONFIG.json)"
$ firebase deploy --only functions
Varsayılan kısıtlamaları ayarlama
Varsayılan kısıtlamalar ilk başlatmadan önce uygulanabilir. Bunu statik kaynakla yapma yer paylaşımlarını kullanabilirsiniz. Kısıtlamalar sırasıyla farklı kullanıcı türlerine uygulanır. Farklı kullanıcı türleri hakkında bilgi edinmek için Çok Kullanıcılı Destek.
Gözetimsiz sistem kullanıcısı için varsayılan kısıtlama
config_defaultFirstUserRestrictions
dize dizisi
frameworks/base/core/res/res/values/config.xml
. Bu kısıtlamayı ayarlama
Android Debug Bridge'i (ADB), kısıtlama kaldırılana kadar otomatik olarak devre dışı bırakır.
örnek:
<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) için varsayılan kısıtlamalar,
ve misafirler,
frameworks/base/core/res/res/xml/config_user_types.xml
. Bunları üst üste bindirerek
dizeleri kullanarak sırasıyla her kullanıcı türünde varsayılan kısıtlamaları ayarlayabilirsiniz. Ö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>.