Implémenter un fournisseur App Check personnalisé

App Check est compatible avec plusieurs fournisseurs intégrés: DeviceCheck et AppAttest sur les plates-formes Apple, Play Integrity sur Android et reCAPTCHA Enterprise dans les applications Web (présentation). Il s'agit de fournisseurs bien connus qui devraient répondre aux besoins de la plupart des développeurs. Toutefois, vous pouvez également implémenter vos propres fournisseurs App Check personnalisés. L'utilisation d'un fournisseur personnalisé est nécessaire dans les cas suivants:

  • Vous souhaitez utiliser un fournisseur autre que les fournisseurs intégrés.

  • Vous souhaitez utiliser les fournisseurs intégrés de manière non compatible.

  • Vous souhaitez valider des appareils à l'aide de plates-formes autres qu'Apple, Android et le Web. Par exemple, vous pouvez créer des fournisseurs App Check pour les OS de bureau ou les appareils IoT.

  • Vous souhaitez implémenter vos propres techniques de validation sur n'importe quelle plate-forme.

Présentation

Pour implémenter un fournisseur App Check personnalisé, vous avez besoin d'un environnement backend sécurisé pouvant exécuter Firebase Admin SDK Node.js. Il peut s'agir de Cloud Functions, d'une plate-forme de conteneur telle que Cloud Run ou de votre propre serveur.

À partir de cet environnement, vous fournirez un service accessible en réseau qui reçoit une preuve d'authenticité de la part des clients de votre application et, si la preuve d'authenticité passe votre évaluation de l'authenticité, renvoie un jeton App Check. Les indicateurs spécifiques que vous utilisez comme preuve d'authenticité dépendent soit du fournisseur tiers que vous utilisez, soit des indicateurs de votre propre invention, si vous implémentez une logique personnalisée.

En règle générale, vous exposez ce service en tant que point de terminaison REST ou gRPC, mais ce détail vous appartient.

Créer le point de terminaison d'acquisition de jetons

  1. Installez et initialisez Admin SDK.

  2. Créez un point de terminaison accessible en réseau pouvant recevoir des données d'authenticité de vos clients. Exemple, à l'aide de Cloud Functions :

    // Create endpoint at https://example-app.cloudfunctions.net/fetchAppCheckToken
    exports.fetchAppCheckToken = functions.https.onRequest((request, response) => {
      // ...
    });
    
  3. Ajoutez à la logique du point de terminaison qui évalue les données d'authenticité. Il s'agit de la logique de base de votre fournisseur App Check personnalisé, que vous devrez écrire vous-même.

  4. Si vous déterminez que le client est authentique, utilisez Admin SDK pour créer un jeton App Check et le renvoyer au client avec son heure d'expiration:

    const admin = require('firebase-admin');
    admin.initializeApp();
    
    // ...
    
    admin.appCheck().createToken(appId)
        .then(function (appCheckToken) {
          // Token expires in an hour.
          const expiresAt = Math.floor(Date.now() / 1000) + 60 * 60;
    
          // Return appCheckToken and expiresAt to the client.
        })
       .catch(function (err) {
         console.error('Unable to create App Check token.');
         console.error(err);
       });
    

    Si vous ne parvenez pas à vérifier l'authenticité du client, renvoyez une erreur (par exemple, une erreur HTTP 403).

  5. Facultatif: définissez la valeur TTL (Time To Live) pour les jetons App Check émis par votre fournisseur personnalisé en transmettant un objet AppCheckTokenOptions à createToken(). Vous pouvez définir le TTL sur une valeur comprise entre 30 minutes et sept jours. Lorsque vous définissez cette valeur, tenez compte des compromis suivants:

    • Sécurité : les valeurs TTL plus courtes offrent une sécurité renforcée, car elles réduisent la période pendant laquelle un jeton divulgué ou intercepté peut être utilisé de manière abusive par un pirate informatique.
    • Performances : des TTL plus courts signifient que votre application effectuera des attestations plus fréquemment. Étant donné que le processus d'attestation des applications ajoute de la latence aux requêtes réseau à chaque exécution, une valeur TTL courte peut affecter les performances de votre application.

    La valeur TTL par défaut de 1 heure est raisonnable pour la plupart des applications.

Étapes suivantes

Maintenant que vous avez implémenté la logique côté serveur de votre fournisseur personnalisé, découvrez comment l'utiliser à partir de vos clients Apple, Android et Web.