Join us for Firebase Summit on November 10, 2021. Tune in to learn how Firebase can help you accelerate app development, release with confidence, and scale with ease. Register

Proteger suas credenciais da nuvem do Firebase ML em apps para Android

Se o aplicativo para Android usa uma das APIs de nuvem do Firebase ML, antes de lançar seu aplicativo na produção, é preciso tomar algumas medidas 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 de nuvem. Observe que somente dispositivos sem acesso root podem se autenticar com o método descrito.

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

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

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

  1. Verifique se você tem as assinaturas SHA-1 do seu aplicativo. Consulte Como autenticar seu cliente para saber como fazer isso.

  2. Acesse as Configurações do projeto no Console do Firebase e selecione a guia Configurações.

  3. Role a tela para baixo até o card Seus apps e selecione seu app Android.

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

2. Restrinja o escopo das 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 o projeto.

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

  3. Na seção Restrições da API, selecione Restringir chave e adicione à lista todas as APIs que devem ter acesso liberado para a chave. Não inclua a API Cloud Vision.

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

Agora as chaves de API atuais não concederão acesso aos serviços de ML na nuvem, mas todas elas continuarão funcionando nas APIs adicionadas à lista de restrições de API.

Se você ativar mais APIs no futuro, precisará adicioná-las à lista de restrições de API para a chave em questão.

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

Por fim, crie uma nova chave de API que será usada apenas para desenvolvimento. O Firebase ML pode usar essa chave de API para acessar serviços do Google Cloud em ambientes em que não é possível autenticar apps, como quando executado em emuladores.

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

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

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

  2. Para garantir que a nova chave de API de depuração não vaze com o lançamento do aplicativo, especifique a chave da 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 de certificado para autenticar seu cliente na produção e usar chaves de API, no caso a chave de depuração, somente em compilações de depuração:

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

    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)

Próximos passos

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