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 avviarla in produzione devi svolgere alcuni passaggi aggiuntivi per impedire l'accesso non autorizzato all'API.

Per le app di produzione, dovrai assicurarti che solo i client autenticati possano accedere ai servizi cloud. Tieni presente che solo i dispositivi non rooted possono autenticarsi 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 app di produzione con Firebase

Innanzitutto, registra le app di produzione con Firebase.

  1. Assicurati di avere le firme SHA-1 dell'app. Per scoprire come, consulta la sezione Autentificazione del cliente.

  2. Vai alle Impostazioni progetto nella console Firebase, quindi seleziona la scheda 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. Limitare l'ambito delle chiavi API

Successivamente, configura le chiavi API esistenti per non consentire l'accesso all'API Cloud Vision:

  1. Apri la pagina Credenziali della console Google Cloud. Quando richiesto, seleziona il tuo 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 di non includere l'API Cloud Vision.

    Quando configuri le limitazioni delle API di una chiave API, dichiari esplicitamente le API a cui la chiave ha accesso. Per impostazione predefinita, quando nella sezione Restrizioni delle API è selezionata l'opzione Non limitare la chiave, una chiave API può essere utilizzata per accedere a qualsiasi API abilitata per il progetto.

Ora le chiavi API esistenti non concederanno l'accesso ai servizi Cloud ML, ma ogni chiave continuerà a funzionare per tutte le API aggiunte al relativo elenco di restrizioni API.

Tieni presente che se abiliti altre API in futuro, dovrai aggiungerle all'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ò utilizzare questa chiave API per accedere ai servizi Google Cloud in ambienti in cui non è possibile l'autenticazione delle app, ad esempio quando viene eseguita su emulatori.

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

    1. Apri la pagina 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 all'API da app non autenticate, quindi tieni riservata la chiave.

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

    1. Se non hai già un file manifest di debug, creane uno facendo clic su File > Nuovo > Altro > File manifest Android e selezionando debug degli insiemi di origine 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 della fingerprint del certificato per autenticare il client in produzione e per utilizzare le chiavi API, la chiave di debug, 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 informazioni su come preparare l'app al lancio quando utilizzi altre funzionalità di Firebase.