Proteja as credenciais de nuvem do seu aplicativo Firebase ML para Android

Se seu aplicativo Android usa uma das APIs de nuvem do Firebase ML, antes de lançar seu aplicativo em produção, você deverá realizar algumas etapas adicionais para impedir o acesso não autorizado à API.

Para seus aplicativos de produção, você garantirá que apenas clientes autenticados possam acessar os serviços em nuvem. (Observe que apenas dispositivos sem root podem ser autenticados usando o método descrito.)

Em seguida, você criará uma chave de API somente para depuração que poderá usar por conveniência durante o teste e o desenvolvimento.

1. Registre seus aplicativos de produção no Firebase

Primeiro, registre seus aplicativos de produção no Firebase.

  1. Certifique-se de ter as assinaturas SHA-1 do seu aplicativo. Consulte Autenticando seu cliente para saber como.

  2. Vá para as do projeto no console do Firebase e selecione a guia Configurações .

  3. Role para baixo até o cartão Seus aplicativos e selecione seu aplicativo Android.

  4. Adicione a assinatura SHA-1 do seu aplicativo às informações do seu aplicativo.

2. Restrinja o escopo de suas chaves de API

Em seguida, configure suas chaves de API existentes para proibir o acesso à API Cloud Vision:

  1. Abra a página Credenciais do console do Google Cloud. Quando solicitado, selecione seu projeto.

  2. Para cada chave de API existente na lista, abra a visualização de edição.

  3. Na seção Restrições de API , selecione Restringir chave e adicione à lista todas as APIs às quais você deseja que a chave de API tenha acesso. Certifique-se de não incluir a API Cloud Vision.

    Ao configurar as restrições de API de uma chave de API, você declara explicitamente as APIs às quais a chave tem acesso. Por padrão, quando a seção Restrições de API tiver a opção Não restringir chave selecionada, uma chave de API poderá ser usada para acessar qualquer API que esteja habilitada para o projeto.

Agora, suas chaves de API existentes não concederão acesso aos serviços de ML em nuvem, mas cada chave continuará funcionando para quaisquer APIs que você adicionou à sua lista de restrições de API .

Observe que se você ativar quaisquer APIs adicionais no futuro, deverá adicioná-las à lista de restrições de API da chave de API aplicável.

3. Crie e use uma chave de API somente para depuração

Por fim, crie uma nova chave de API para ser usada apenas para desenvolvimento. O Firebase ML pode usar essa chave de API para acessar os serviços do Google Cloud em ambientes onde a autenticação do aplicativo não é possível, como na execução em emuladores.

  1. Crie uma nova chave de API a ser usada no desenvolvimento:

    1. Abra a página Credenciais do console do Google Cloud. Quando solicitado, selecione seu projeto.

    2. Clique em Criar credenciais > Chave de API e anote a nova chave de API. Essa chave permite acesso à API de aplicativos não autenticados, portanto, mantenha essa chave confidencial .

  2. Para garantir que a nova chave de API de depuração não vaze com seu aplicativo lançado, especifique a chave de API de depuração em um arquivo de manifesto do Android usado apenas para compilações de depuração:

    1. Se você ainda não tiver um manifesto de depuração, crie um clicando em Arquivo > Novo > Outro > Arquivo de manifesto do Android e selecionando debug nos conjuntos de origem de destino.

    2. No manifesto de depuração, adicione a seguinte declaração:

      <application>
      <meta-data
          android:name="com.firebase.ml.cloud.ApiKeyForDebug"
          android:value="your-debug-api-key" />
      </application>
      
  3. No seu aplicativo, configure o Firebase ML para usar a correspondência de impressão digital do certificado para autenticar seu cliente na produção e para usar chaves de API (a chave de depuração) apenas em builds de depuração:

    Kotlin+KTX

    val optionsBuilder = FirebaseVisionCloudImageLabelerOptions.Builder()
    if (!BuildConfig.DEBUG) {
        // Requires physical, non-rooted device:
        optionsBuilder.enforceCertFingerprintMatch()
    }
    
    // Set other options. For example:
    optionsBuilder.setConfidenceThreshold(0.8f)
    // ...
    
    // And lastly:
    val options = optionsBuilder.build()
    FirebaseVision.getInstance().getCloudImageLabeler(options).processImage(myImage)

    Java

    FirebaseVisionCloudImageLabelerOptions.Builder optionsBuilder =
            new FirebaseVisionCloudImageLabelerOptions.Builder();
    if (!BuildConfig.DEBUG) {
        // Requires physical, non-rooted device:
        optionsBuilder.enforceCertFingerprintMatch();
    }
    
    // Set other options. For example:
    optionsBuilder.setConfidenceThreshold(0.8f);
    // ...
    
    // And lastly:
    FirebaseVisionCloudImageLabelerOptions options = optionsBuilder.build();
    FirebaseVision.getInstance().getCloudImageLabeler(options).processImage(myImage);

Próximos passos

Consulte a lista de verificação de lançamento para obter informações sobre como preparar seu aplicativo para lançamento ao usar outros recursos do Firebase.