Skorzystaj z instrukcji na tej stronie, aby zintegrować kontroler ograniczeń debugowania AAOS (Demokratyczna Republika Konga).
Rysunek 1. Przykład aplikacji DRC.
Architektura
Architektura DRK przedstawiliśmy na rys. 2. Komponenty zaznaczone na czerwono (wydawca tokena i DRC) mają towarzyszące mu implementacje referencyjne, które możesz dostosować.
Rysunek 2. na architekturze Demokratycznej Republiki Ludowej.
Co to jest Demokratyczna Republika Konga?
Jednostka centralna samochodu zawiera aplikację DRC (zobacz implementację referencyjne w
packages/apps/Car/DebuggingRestrictionController
). Aplikacja referencyjna zawiera
logikę odbierania tokena dostępu od jego wydawcy, weryfikacji tokena oraz
a następnie zastosuj zmiany ograniczeń debugowania zgodnie z danymi w tokenie. Ta logika obejmuje
podstawowych elementów UX po stronie samochodu.
Jaki jest wydawca tokena?
To usługa sieciowa, która generuje kryptograficznie podpisane tokeny dostępu (patrz
implementacja w środowisku packages/apps/Car/DebuggingRestrictionController/server
.
Referencyjna usługa internetowa to wdrażana funkcja Firebase w Cloud Functions (aby dowiedzieć się więcej, zapoznaj się z
Cloud Functions dla
Firebase).
Wymagania wstępne
Przed wdrożeniem implementacji referencyjnej wykonaj te czynności.
Przygotowywanie certyfikatów do podpisywania tokenów dostępu
Wydawca tokena generuje jako tokeny dostępu podpisy internetowe JSON (JWS). Optymalny zgodność, wydawca referencyjny obsługuje tylko algorytm RS256 (podpisy RSA z SHA256). Aby ułatwić rotację kluczy, do podpisywania użyj łańcucha certyfikatów zamiast jednego certyfikatu tokeny dostępu. Typowy łańcuch certyfikatów powinien składać się z głównego certyfikatu CA, pośredniego certyfikatu CA i certyfikatu jednostki końcowej.
Certyfikat jednostki końcowej podpisujący tokeny JWS nie różni się od standardowego protokołu TLS. certyfikat. Możesz kupić certyfikat od publicznych urzędów certyfikacji, takich jak DigiCert, własny łańcuch certyfikatów korzystający z podpisanych samodzielnie certyfikatów głównych CA lub sprzętowych modułów zabezpieczeń. Certyfikat jednostki końcowej powinien być certyfikatem X509v3 z alternatywną nazwą podmiotu (SAN). Rozszerzenie SAN zawiera identyfikator (np. nazwę hosta) tokena. wystawcy. Certyfikaty RSA powinny być preferowane zamiast certyfikatów EC, ponieważ token wydawca obsługuje tylko protokół RS256.
Google udostępnia skrypt powłoki do generowania samodzielnie podpisanych certyfikatów
packages/apps/Car/DebuggingRestrictionController/server/genkey.sh
Skonfiguruj Firebase
Wydawca tokena referencyjnego używa Uwierzytelnianie Firebase oraz funkcji Firebase w Cloud Functions.
Aby skonfigurować konto Firebase:
- Aby utworzyć projekt Firebase, zobacz Dodaj Firebase do swojego projektu na Androida.
- Aby włączyć niektóre moduły uwierzytelniające Firebase, zobacz Gdzie mogę zacząć od Uwierzytelniania Firebase?
- Aby dodać pustą funkcję Firebase w Cloud Functions, zobacz Pobierz Rozpoczęto.
- Jeśli jeszcze tego nie zrobiłeś, zainstaluj narzędzia
Node.js
, NPM i Firebase, aby skompilować i wdrożyć wydawcę tokena.
Integracja z aplikacją DRC
Aplikacja DRC znajduje się w:
packages/apps/Car/DebuggingRestrictionController
Aplikację można skompilować
w pakiecie w AOSP z Soong lub
niegrupowane z Gradle.
Kompilacja w pakiecie
Aby utworzyć aplikację w pakiecie:
- Skopiuj
applicationId
,projectId
iapiKey
z języka:google-services.json
na językpackages/apps/Car/DebuggingRestrictionController/soong/FirebaseApplication.java
. Dzięki temu aplikacja DRC będzie mogła prawidłowo łączyć się z Firebase. - Zaktualizuj te stałe w:
packages/apps/Car/DebuggingRestrictionController/soong/BuildConfig.java
:TOKEN_USES_SELF_SIGNED_CA
wskazuje, czy podpisane samodzielnie certyfikaty główne CA są . Jeśli ta opcja jest włączona, aplikacja DRC ufa tylko certyfikatowi głównego urzędu certyfikacji zakodowanego w formacie PEM określonym wROOT_CA_CERT
TOKEN_ISSUER_API_NAME
to nazwa funkcji Firebase w Cloud Functions i powinna pasują do funkcji w Cloud utworzonej wcześniej w konsoli Firebase.- Wartość
TOKEN_ISSUER_HOSTNAME
powinna być zgodna z alternatywną nazwą podmiotu w parametrze certyfikatu jednostki końcowej, który będzie podpisywać tokeny dostępu. DRC_TEST_EMAIL
iDRC_TEST_PASSWORD
to dane logowania dla opcjonalne konto testowe, które można przygotować wstępnie do obsługi administracyjnej w Firebase, jeśli masz włączone Logowanie za pomocą adresu e-mail/hasła. Służą one tylko do testów instrumentowanych.
Aplikacja jest teraz skonfigurowana i może korzystać z konta Firebase i certyfikatów.
Na Androidzie 9 i nowszych musisz skonfigurować
dodanie do listy dozwolonych uprawnień z podwyższonymi uprawnieniami.
Lista dozwolonych musi zawierać co najmniej android.permission.MANAGE_USERS
. Na przykład:
<permissions> <privapp-permissions package="com.android.car.debuggingrestrictioncontroller"> <permission name="android.permission.INTERNET"/> <permission name="android.permission.MANAGE_USERS"/> </privapp-permissions> </permissions>
Niegrupowana kompilacja
Niepołączone kompilacje DRC wykorzystują Gradle do kompilowania aplikacji.
Aby utworzyć niepogrupowaną kompilację:
- Sprawdź, czy masz zainstalowany pakiet Android SDK.
- Utwórz plik tekstowy o nazwie
local.properties
w katalogu głównym aplikacji. - Ustaw lokalizację pakietu Android SDK:
sdk.dir=path/to/android/sdk
- Aby skonfigurować Firebase, skopiuj
google-services.json
dopackages/apps/Car/DebuggingRestrictionController/app
Gradle analizuje plik i automatycznie skonfiguruje resztę. - Zdefiniuj zmienne środowiskowe. Tak jak w przypadku pakietów kompilacji, musisz określić:
$TOKEN_USES_SELF_SIGNED_CA
: true lub false;$ROOT_CA_CERT
: ścieżka do głównego certyfikatu CA zakodowanego w formacie PEM;$TOKEN_ISSUER_API_NAME
: nazwa funkcji Firebase w Cloud Functions;$TOKEN_ISSUER_HOST_NAME
: numer SAN w certyfikacie;$DRC_TEST_EMAIL
i$DRC_TEST_EMAI
L: dane uwierzytelniające na potrzeby testu tylko do debugowania.
- Aby utworzyć aplikację przy użyciu Gradle, uruchom takie polecenie:
$ ./gradlew build
Zintegruj wydawcę tokena
Wydawca tokena referencyjnego to funkcja Firebase w Cloud Functions zaimplementowana w Node.js
.
Tę funkcję może wywołać tylko uwierzytelniony użytkownik. Przed wdrożeniem aplikacji ustaw
klucz prywatny i certyfikaty używane do podpisywania tokenów JWS.
- Wypełnij plik JSON następującą treścią:
{ "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" }
Certyfikaty są porządkowane najpierw na podstawie certyfikatu jednostki końcowej i certyfikatu głównego urzędu certyfikacji na końcu. Okres ważności można dostosować i ustawić dłuższy, jeśli Wydany token może zostać odebrany i wykorzystany przez aplikację DRC dopiero po pewnym czasie. Token nie jest obsługiwane.
- Prześlij konfigurację do Firebase:
- Wdróż funkcję Firebase w Cloud:
- Aby zarządzać wydawcą tokena i go monitorować, zobacz Zarządzaj opcje wdrażania funkcji i środowiska wykonawczego.
$ firebase functions:config:set api_config="$(cat YOUR_CONFIG.json)"
$ firebase deploy --only functions
Ustaw ograniczenia domyślne
Domyślne ograniczenia można zastosować przed pierwszym uruchomieniem. Zrób to z zasobem statycznym i zastępują wartości domyślne w platformie Androida. Ograniczenia mogą być w odniesieniu do różnych typów użytkowników. Aby dowiedzieć się więcej o różnych typach użytkowników, zobacz Obsługa wielu użytkowników.
Domyślne ograniczenie dla użytkownika systemu bez interfejsu graficznego można skonfigurować za pomocą:
tablica ciągów znaków config_defaultFirstUserRestrictions
w
frameworks/base/core/res/res/values/config.xml
Ustawienie tego ograniczenia
automatycznie wyłącza Android Debug Bridge (ADB) do czasu usunięcia ograniczenia w przypadku:
przykład:
<string-array translatable="false" name="config_defaultFirstUserRestrictions"> <item>no_debugging_features</item> </string-array>
domyślne ograniczenia dla zwykłych użytkowników (na przykład kierowców i pasażerów),
i gości można skonfigurować w
frameworks/base/core/res/res/xml/config_user_types.xml
Możesz nałożyć na nie elementy
ciągi tekstowe, aby ustawić domyślne ograniczenia odpowiednio dla każdego typu użytkownika, na przykład:
<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>