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, avant de la lancer en production, vous devez prendre des mesures supplémentaires pour empêcher tout accès non autorisé à l'API.

Pour vos applications de production, vous devez vous assurer que seuls les clients authentifiés peuvent accéder aux services cloud. (Notez que seuls les appareils non rootés 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 d'avoir les signatures SHA-1 de votre application. Pour en savoir plus, consultez Authentifier votre client.

  2. Accédez aux paramètres de votre projet  dans la console Firebase, puis sélectionnez l'onglet Paramètres.

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

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

2. Restreindre le champ d'application de vos clés API

Ensuite, configurez vos clés API existantes pour interdire 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. Assurez-vous de 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, lorsqu'aucune restriction n'est sélectionnée dans la section Restrictions relatives aux 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 ne donneront pas accès aux services de ML dans le 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 d'autres API à l'avenir, vous devrez les ajouter à la liste des restrictions d'API pour la clé API concernée.

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é permet d'accéder à l'API à partir d'applications non authentifiées. Gardez-la donc 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 versions de débogage :

    1. Si vous n'avez pas encore de 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 de l'empreinte du certificat afin d'authentifier votre client en production et pour utiliser les clés API (la clé de débogage) uniquement dans les versions de débogage :

    Kotlin

    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 votre application au lancement lorsque vous utilisez d'autres fonctionnalités Firebase.