Protégez les identifiants cloud de votre application Firebase ML pour Android

Si votre application Android utilise l'une des API cloud de Firebase ML, vous devez prendre des mesures supplémentaires avant de la lancer en production pour empêcher tout accès non autorisé à l'API.

Pour vos applications de production, vous vous assurez que seuls les clients authentifiés peuvent accéder aux services cloud. (Notez que seuls les appareils non en mode root peuvent s'authentifier à l'aide de la méthode décrite.)

Vous allez ensuite créer une clé API réservée au débogage que vous pourrez utiliser pour plus de commodité lors des tests et du développement.

1. Enregistrer vos applications de production auprès de Firebase

Commencez par enregistrer vos applications de production auprès de Firebase.

  1. Assurez-vous que vous disposez des signatures SHA-1 de votre application. Pour savoir comment procéder, consultez Authentifier votre client.

  2. Accédez à vos paramètres du projet  dans la console Firebase, puis sélectionnez l'onglet Paramètres.

  3. Faites défiler l'écran vers le bas jusqu'à la fiche Vos applications, puis sélectionnez votre application Android.

  4. Ajoutez la signature SHA-1 de votre application aux informations de votre application.

2. Restreindre la portée de vos clés API

Ensuite, configurez vos clés API existantes pour refuser l'accès à l'API Cloud Vision:

  1. Ouvrez la page Identifiants de la console Google Cloud. Lorsque vous y êtes invité, sélectionnez votre projet.

  2. Pour chaque clé API existante dans la liste, ouvrez la vue d'édition.

  3. Dans la section Restrictions relatives aux API, sélectionnez Restreindre la clé, puis ajoutez à la liste toutes les API auxquelles vous souhaitez que la clé API ait accès. Veillez à ne pas inclure l'API Cloud Vision.

    Lorsque vous configurez les restrictions d'API d'une clé API, vous déclarez explicitement les API auxquelles la clé a accès. Par défaut, lorsque l'option Ne pas restreindre la clé est sélectionnée dans la section Restrictions d'API, une clé API peut être utilisée pour accéder à n'importe quelle API activée pour le projet.

Désormais, vos clés API existantes n'accorderont pas l'accès aux services de ML cloud, mais chaque clé continuera de fonctionner pour toutes les API que vous avez ajoutées à sa liste de restrictions d'API.

Notez que si vous activez des API supplémentaires par la suite, vous devez les ajouter à la liste Restrictions d'API pour la clé API applicable.

3. Créer et utiliser une clé API réservée au débogage

Enfin, créez une clé API à utiliser uniquement pour le développement. Firebase ML peut utiliser cette clé API pour accéder aux services Google Cloud dans les environnements où l'authentification des applications n'est pas possible, par exemple lors de l'exécution sur des émulateurs.

  1. Créez une clé API à utiliser pour le développement:

    1. Ouvrez la page Identifiants de la console Google Cloud. Lorsque vous y êtes invité, sélectionnez votre projet.

    2. Cliquez sur Créer des identifiants > Clé API et notez la nouvelle clé API. Cette clé autorise l'accès à l'API à partir d'applications non authentifiées. Vous devez donc la garder confidentielle.

  2. Pour vous assurer que la nouvelle clé API de débogage n'est pas divulguée avec votre application publiée, spécifiez la clé API de débogage dans un fichier manifeste Android utilisé uniquement pour les builds de débogage:

    1. Si vous ne disposez pas encore d'un fichier manifeste de débogage, créez-en un en cliquant sur File > New > Other > Android Manifest File (Fichier > Nouveau > Autre > Fichier manifeste Android), puis en sélectionnant debug dans les ensembles de sources cibles.

    2. Dans le fichier manifeste de débogage, ajoutez la déclaration suivante:

      <application>
      <meta-data
          android:name="com.firebase.ml.cloud.ApiKeyForDebug"
          android:value="your-debug-api-key" />
      </application>
  3. Dans votre application, configurez Firebase ML pour utiliser la correspondance d'empreinte du certificat afin d'authentifier votre client en production et d'utiliser les clés API (la clé de débogage) uniquement dans les versions de débogage:

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

Étapes suivantes

Consultez la checklist de lancement pour savoir comment préparer le lancement de votre application lorsque vous utilisez d'autres fonctionnalités Firebase.