O Google tem o compromisso de promover a igualdade racial para as comunidades negras. Saiba como.

Guia de integração do controlador de restrição de depuração

Use as instruções a seguir para integrar o controlador de restrição de depuração AAOS (DRC).

Exemplo app Figura 1. RDC

Arquitetura

A arquitetura DRC é ilustrada abaixo. Os componentes destacados em vermelho (emissor de token e controlador de restrição de lançamento) acompanham implementações de referência que você pode personalizar.

Arquitetura Figura 2. RDC

O que é a RDC?

A unidade de cabeça do carro inclui o aplicativo RDC (ver a implementação de referência em packages/apps/Car/DebuggingRestrictionController ). O aplicativo de referência inclui a lógica para receber um token de acesso do emissor do token, validar o token e, em seguida, aplicar as alterações de restrição de depuração conforme especificado no token. A lógica inclui elementos básicos de UX no lado do carro.

Qual é o emissor do token?

Este é um serviço web que questões assinado criptograficamente tokens de acesso (veja a implementação de referência em packages/apps/Car/DebuggingRestrictionController/server ). O serviço de referência web é uma função Firebase Nuvem implantável (para saber mais, consulte Funções de nuvem para Firebase ).

Pré-requisitos

Antes de implantar uma implementação de referência, certifique-se de concluir as tarefas a seguir.

Preparando certificados para assinar tokens de acesso

O emissor do token gera JSON Web Signatures (JWS) como tokens de acesso. Para compatibilidade ideal, o emissor de referência suporta apenas o algoritmo RS256 (assinaturas RSA com SHA256). Para facilitar a rotação de chaves, use uma cadeia de certificados em vez de um único certificado para assinar tokens de acesso. Uma cadeia de certificação típica deve consistir em um certificado CA raiz, um certificado CA intermediário e um certificado de entidade final.

O certificado de entidade final que assina os tokens JWS não é diferente de um certificado TLS padrão. Você pode comprar um certificado de CAs públicos, como DigiCert, ou manter sua própria cadeia de certificados usando certificados CA raiz autoassinados ou Módulos de Segurança de Hardware. O certificado da entidade final deve ser um certificado X509v3 com uma extensão de Nome Alternativo do Assunto (SAN). A extensão SAN contém um identificador (por exemplo, nome do host) do emissor do token. Por último, os certificados RSA devem ter preferência sobre os certificados EC porque o emissor do token só oferece suporte a RS256.

Google fornece um script shell para gerar certificados auto-assinados em packages/apps/Car/DebuggingRestrictionController/server/genkey.sh .

Configurando o Firebase

A referência de token Emissor utiliza autenticação Firebase e Firebase Nuvem Função .

Para configurar sua conta Firebase:

  1. Para criar um projeto Firebase, consulte Adicionar Firebase ao seu projeto Android .
  2. Para habilitar algumas autenticadores Firebase, ver onde eu começo com autenticação Firebase? .
  3. Para adicionar uma função Firebase Nuvem vazios, consulte Get Started .
  4. Se ainda não tiver feito isso, instale Node.js, NPM e Firebase Tools para compilar e implantar o Token Issuer.

Integrando o aplicativo DRC

O aplicativo RDC referência situa-se em packages/apps/Car/DebuggingRestrictionController . O aplicativo pode ser construído agrupados em AOSP com Soong ou desagregadas com Gradle .

Compilação em pacote

Para construir um aplicativo empacotado:

  1. Copie o applicationId , projectId e apiKey de google-services.json em packages/apps/Car/DebuggingRestrictionController/soong/FirebaseApplication.java . Isso permite que o aplicativo DRC se conecte corretamente ao Firebase.
  2. Atualizar essas constantes em packages/apps/Car/DebuggingRestrictionController/soong/BuildConfig.java :
    • TOKEN_USES_SELF_SIGNED_CA indica se são utilizados certificados de CA raiz auto-assinados. Se ativado, o aplicativo RDC confia apenas o certificado da CA raiz-codificado PEM especificado no ROOT_CA_CERT .
    • TOKEN_ISSUER_API_NAME é o nome da função Firebase Cloud e deve coincidir com a função Nuvem criado anteriormente no console Firebase.
    • TOKEN_ISSUER_HOSTNAME deve corresponder ao Nome alternativo do assunto no certificado de entidade final que irá assinar os tokens de acesso.
    • DRC_TEST_EMAIL e DRC_TEST_PASSWORD são credenciais para uma conta de teste opcional, que pode ser pré-provisionados em Firebase se você tiver ativado o sinal-in E-mail / senha. Eles são usados ​​apenas para testes instrumentados.

O aplicativo agora está configurado para usar sua conta Firebase e seus certificados. Em Android 9 e superior, é necessário configurar permissão privilegiada Allowlisting . O allowlist deve conter pelo menos android.permission.MANAGE_USERS . Por exemplo:

<permissions>
  <privapp-permissions package="com.android.car.debuggingrestrictioncontroller">
    <permission name="android.permission.INTERNET"/>
    <permission name="android.permission.MANAGE_USERS"/>
  </privapp-permissions>
</permissions>

Compilação não agrupada

As compilações do DRC não agrupadas usam o Gradle para compilar o aplicativo.

Para criar uma construção desagregada:

  1. Confirme que você instalou o Android SDK.
  2. Criar um arquivo de texto chamado local.properties no diretório raiz do aplicativo.
  3. Defina a localização do SDK Android:
     sdk.dir=path/to/android/sdk
    
  4. Para configurar Firebase, copie google-services.json para packages/apps/Car/DebuggingRestrictionController/app . O Gradle analisa o arquivo e configura o restante automaticamente.
  5. Defina as variáveis ​​de ambiente. Assim como acontece com as compilações agrupadas, você deve especificar:
    • $TOKEN_USES_SELF_SIGNED_CA : verdadeiro ou falso;
    • $ROOT_CA_CERT : caminho para o certificado da CA raiz-codificado PEM;
    • $TOKEN_ISSUER_API_NAME : nome da função Firebase nuvem;
    • $TOKEN_ISSUER_HOST_NAME : SAN no certificado;
    • $DRC_TEST_EMAIL e $DRC_TEST_EMAI L: credenciais para uma conta de teste, compilações de depuração somente.
  6. Para construir o aplicativo com Gradle, executar um comando como este:
    $ ./gradlew build
    

Integrando o Emissor do Token

O emissor de token de referência é um Firebase Cloud Function implementado em Node.js. A função só pode ser chamada por um usuário autenticado. Antes de implantar o aplicativo, você deve configurar a chave privada e os certificados usados ​​para assinar os tokens JWS.

  1. Preencher um arquivo JSON com o seguinte conteúdo:
    {
        "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"
    }
    

    Os certificados são solicitados com o certificado da entidade final primeiro e o certificado CA raiz no final. O período de expiração é personalizável e pode ser definido para uma duração mais longa se um token emitido demorar algum tempo antes de ser recebido e consumido por um aplicativo DRC. A revogação de token não é compatível.

  2. Faça upload da configuração para o Firebase:
  3. $ firebase functions:config:set api_config="$(cat YOUR_CONFIG.json)"
    
  4. Implante a função Firebase Cloud:
  5. $ firebase deploy --only functions
    
  6. Para gerenciar e monitorar seu Token Emissora, consulte Gerenciar opções de funções de implementação e tempo de execução .

Configurando restrições padrão

Restrições padrão podem ser aplicadas antes da primeira inicialização. Faça isso com sobreposições de recursos estáticos para substituir os padrões na estrutura do Android. As restrições podem ser aplicadas respectivamente a diferentes tipos de usuários. Para saber mais sobre os diferentes tipos de usuários, consulte Suporte Multi-User .

A restrição padrão para o utilizador do sistema sem cabeça pode ser configurada com o config_defaultFirstUserRestrictions cadeia-matriz em frameworks/base/core/res/res/values/config.xml . Definir essa restrição desativa automaticamente o Android Debug Bridge (ADB) até que a restrição seja removida, por exemplo:

<string-array translatable="false" name="config_defaultFirstUserRestrictions">
  <item>no_debugging_features</item>
</string-array>

As restrições padrão para os usuários regulares (por exemplo, os motoristas e passageiros), e os hóspedes podem ser configurados em frameworks/base/core/res/res/xml/config_user_types.xml . Você pode sobrepor essas strings para definir as restrições padrão em cada tipo de usuário, respectivamente, por exemplo:

<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>