Hata Ayıklama Kısıtlama Denetleyicisi Entegrasyon Kılavuzu

AAOS Hata Ayıklama Kısıtlama Denetleyicisini (DRC) entegre etmek için aşağıdaki talimatları kullanın.

Şekil 1. DRC uygulaması örneği

Mimari

DRC mimarisi aşağıda gösterilmiştir. Kırmızı ile belirtilen bileşenler (Token Veren ve İlk Çıkış Kısıtlama Denetleyicisi), özelleştirebileceğiniz referans uygulamalarına sahiptir.

Şekil 2. DRC mimarisi

DRC nedir?

Araba ana ünitesi, DRC uygulamasını içerir ( packages/apps/Car/DebuggingRestrictionController içindeki referans uygulamasına bakın). Referans uygulaması, Belirteç Veren'den bir erişim belirteci alma, belirteci doğrulama ve ardından belirteçte belirtildiği gibi hata ayıklama kısıtlaması değişikliklerini uygulama mantığını içerir. Mantık, araba tarafında temel UX öğelerini içerir.

Token Veren 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, konuşlandırılabilir bir Firebase Bulut işlevidir (daha fazla bilgi edinmek için bkz. Firebase için Bulut İşlevleri ).

Önkoşullar

Bir başvuru uygulamasını dağıtmadan önce aşağıdaki görevleri tamamladığınızdan emin olun.

Erişim belirteçlerini imzalamak için sertifikalar hazırlama

Token Veren, erişim belirteçleri olarak JSON Web İmzalarını (JWS) oluşturur. Optimum uyumluluk için, referans veren yalnızca RS256 algoritmasını destekler (SHA256 ile RSA imzaları). Anahtar döndürmeyi kolaylaştırmak için 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ından, bir ara CA sertifikasından ve bir son varlık sertifikasından oluşmalıdır.

JWS belirteçlerini imzalayan son varlık sertifikası, standart bir TLS sertifikasından farklı değildir. DigiCert gibi genel CA'lardan bir sertifika satın alabilir veya kendinden imzalı kök CA sertifikaları veya Donanım Güvenlik Modülleri 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ı, belirteç verenin bir tanımlayıcısını (örneğin, ana bilgisayar adı) içerir. Son olarak, belirteç veren yalnızca RS256'yı desteklediğinden, RSA sertifikaları EC sertifikalarına tercih edilmelidir.

Google, packages/apps/Car/DebuggingRestrictionController/server/genkey.sh içinde kendinden imzalı sertifikalar oluşturmak için bir kabuk komut dosyası sağlar.

Firebase'i kurma

Referans Token Veren, Firebase Authentication ve Firebase Cloud Function kullanır.

Firebase hesabınızı kurmak için:

  1. Bir Firebase projesi oluşturmak için Android projenize Firebase ekleme konusuna bakın.
  2. Bazı Firebase kimlik doğrulayıcılarını etkinleştirmek için bkz . Firebase Kimlik Doğrulaması ile nereden başlamalıyım? .
  3. Boş bir Firebase Bulut işlevi eklemek için Başlarken bölümüne bakın.
  4. Henüz yapılmadıysa, Token Veren'i derlemek ve dağıtmak için Node.js, NPM ve Firebase Tools'u yükleyin.

DRC uygulamasını entegre etme

Referans DRC uygulaması, package packages/apps/Car/DebuggingRestrictionController içinde bulunur. Uygulama, AOSP'de Soong ile birlikte paket halinde veya Gradle ile paketten ayrılarak oluşturulabilir.

Paketlenmiş yapı

Paketlenmiş bir uygulama oluşturmak için:

  1. google-services.json applicationId , projectId ve apiKey packages/apps/Car/DebuggingRestrictionController/soong/FirebaseApplication.java FirebaseApplication.java içine kopyalayın. Bunu yapmak, DRC uygulamasının Firebase'e doğru şekilde bağlanmasını sağlar.
  2. Bu sabitleri packages/apps/Car/DebuggingRestrictionController/soong/BuildConfig.java :
    • TOKEN_USES_SELF_SIGNED_CA , kendinden imzalı kök CA sertifikalarının kullanılıp kullanılmadığını belirtir. Etkinleştirilirse, DRC uygulaması yalnızca ROOT_CA_CERT içinde belirtilen PEM kodlu kök CA sertifikasına güvenir.
    • TOKEN_ISSUER_API_NAME , Firebase Bulut işlevinin adıdır ve Firebase Konsolunda daha önce 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ı ile eşleşmelidir.
    • DRC_TEST_EMAIL ve DRC_TEST_PASSWORD , E-posta/Parola ile oturum açmayı etkinleştirdiyseniz Firebase'de önceden sağlanabilen isteğe bağlı bir test hesabı için kimlik bilgileridir. Bunlar sadece 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ı İzin İzin Verilenler Listesini 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 derlemeleri, uygulamayı derlemek için Gradle'ı kullanır.

Birleştirilmiş bir yapı oluşturmak için:

  1. Android SDK'yı yüklediğinizi onaylayın.
  2. Uygulamanın kök dizininde local.properties adlı bir metin dosyası oluşturun.
  3. Android SDK'nın konumunu ayarlayın:
     sdk.dir=path/to/android/sdk
    
  4. Firebase'i kurmak için google-services.json dosyasını package packages/apps/Car/DebuggingRestrictionController/app dizinine kopyalayın. Gradle dosyayı ayrıştırır ve gerisini otomatik olarak ayarlar.
  5. Ortam değişkenlerini tanımlayın. Paketlenmiş yapılarda olduğu gibi, şunları belirtmelisiniz:
    • $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: bir test hesabı için kimlik bilgileri, yalnızca derlemelerde hata ayıklama.
  6. Uygulamayı Gradle ile oluşturmak için şöyle bir komut çalıştırın:
    $ ./gradlew build
    

Token Veren Kuruluşu Entegre Etme

Referans Token Veren, Node.js'de 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ı ayarlamalısınız.

  1. 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 sonunda kök CA sertifikası olacak şekilde sıralanır. Sona erme süresi özelleştirilebilir ve verilen bir belirtecin bir DRC uygulaması tarafından alınması ve tüketilmesi biraz zaman alıyorsa daha uzun bir süreye ayarlanabilir. Belirteç iptali desteklenmez.

  2. Yapılandırmayı Firebase'e yükleyin:
  3. $ firebase functions:config:set api_config="$(cat YOUR_CONFIG.json)"
    
  4. Firebase Cloud işlevini dağıtın:
  5. $ firebase deploy --only functions
    
  6. Belirteç Vericinizi yönetmek ve izlemek için İşlev dağıtımını ve çalışma zamanı seçeneklerini yönetme bölümüne bakın.

Varsayılan kısıtlamaları ayarlama

Varsayılan kısıtlamalar, ilk önyüklemeden önce uygulanabilir. Android çerçevesindeki varsayılanları geçersiz kılmak için bunu statik kaynak bindirmeleri ile yapın. Kısıtlamalar, farklı kullanıcı türlerine sırasıyla uygulanabilir. Farklı kullanıcı türleri hakkında bilgi edinmek için Çoklu Kullanıcı Desteği bölümü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 içindeki config_defaultFirstUserRestrictions dize dizisi ile 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 misafirler için varsayılan kısıtlamalar, frameworks/base/core/res/res/xml/config_user_types.xml içinde yapılandırılabilir. Sırasıyla her bir kullanıcı türü için varsayılan kısıtlamaları ayarlamak için bu dizeleri üst üste bindirebilirsiniz, ö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>