Proteggi le credenziali Cloud della tua app per Android Firebase ML

Se la tua app per Android utilizza una delle API cloud di Firebase ML, prima di avviare l'app di produzione, dovresti adottare ulteriori misure per evitare accesso non autorizzato all'API.

Per le app di produzione, ti assicurerai che solo i client autenticati possano per accedere ai servizi cloud. Tieni presente che solo i dispositivi non rooted possono eseguire l'autenticazione utilizzando il metodo descritto.)

Poi, per comodità, creerai una chiave API solo per il debug che potrai utilizzare durante i test e lo sviluppo.

1. Registra le tue app di produzione con Firebase

Innanzitutto, registra le tue app di produzione in Firebase.

  1. Assicurati di disporre delle firme SHA-1 della tua app. Consulta Autenticazione del client per scoprire come.

  2. Vai al tuo Impostazioni progetto nella console Firebase, quindi seleziona Impostazioni .

  3. Scorri verso il basso fino alla scheda Le tue app, quindi seleziona la tua app per Android.

  4. Aggiungi la firma SHA-1 dell'app alle informazioni dell'app.

2. Limita l'ambito delle chiavi API

Poi, configura le chiavi API esistenti per impedire l'accesso a Cloud Vision API:

  1. Apri la pagina Credenziali della console Google Cloud. Quando richiesto, seleziona il progetto.

  2. Per ogni chiave API esistente nell'elenco, apri la visualizzazione di modifica.

  3. Nella sezione Restrizioni delle API, seleziona Limita chiave, quindi aggiungi all'elenco tutte le API a cui vuoi che la chiave API abbia accesso. Assicurati che per non includere l'API Cloud Vision.

    Quando configuri le restrizioni API di una chiave API, accetti esplicitamente che dichiara le API a cui ha accesso la chiave. Per impostazione predefinita, quando l'API nella sezione "Non limitare la chiave" è selezionata l'opzione Non limitare la chiave. Una chiave API può essere per accedere a qualsiasi API abilitata per il progetto.

Ora le chiavi API esistenti non concederanno l'accesso ai servizi Cloud ML, ma continuerà a funzionare per tutte le API che hai aggiunto alle relative restrizioni API dall'elenco di lettura.

Tieni presente che se abiliti altre API in futuro, dovrai aggiungerle dall'elenco Restrizioni API per la chiave API applicabile.

3. Creare e utilizzare una chiave API solo per il debug

Infine, crea una nuova chiave API da utilizzare solo per lo sviluppo. Firebase ML può usa questa chiave API per accedere a Google Cloud servizi in ambienti in cui non è possibile l'autenticazione, ad esempio quando vengono eseguiti su emulatori.

  1. Crea una nuova chiave API da utilizzare per lo sviluppo:

    1. Apri la pagina Credentials (Credenziali) della Console Google Cloud. Quando richiesto, seleziona il progetto.

    2. Fai clic su Crea credenziali > Chiave API e prendi nota della nuova chiave API. Questa chiave consente l'accesso API da app non autenticate, mantenere riservata questa chiave.

  2. Per assicurarti che la nuova chiave API di debug non venga divulgata con l'app rilasciata, specificare la chiave API di debug in un file manifest Android utilizzato solo per il debug build:

    1. Se non hai ancora un manifest di debug, creane uno facendo clic File > Nuovo > Altro > File manifest Android e selezione di debug dagli insiemi di origini di destinazione.

    2. Nel manifest di debug, aggiungi la seguente dichiarazione:

      <application>
      <meta-data
          android:name="com.firebase.ml.cloud.ApiKeyForDebug"
          android:value="your-debug-api-key" />
      </application>
  3. Nell'app, configura Firebase ML in modo da utilizzare la corrispondenza dell'impronta del certificato per di autenticare il client in produzione e di utilizzare le chiavi API, chiave, solo nelle build di debug:

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

Passaggi successivi

Consulta l'elenco di controllo per il lancio per avere informazioni preparando l'app al lancio quando utilizzi altre funzionalità di Firebase.