Implémenter un fournisseur App Check personnalisé

App Check prend en charge plusieurs fournisseurs : DeviceCheck et App Attest sur les plates-formes Apple, Play Integrity et SafetyNet sur Android et reCAPTCHA Enterprise dans les applications Web ( présentation ). Ce sont des fournisseurs bien compris 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 lorsque :

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

  • Vous souhaitez utiliser les fournisseurs intégrés d'une manière non prise en charge.

  • Vous souhaitez vérifier les appareils utilisant des plates-formes autres qu'Apple, Android et le Web. Par exemple, vous pouvez créer des fournisseurs App Check pour les systèmes d’exploitation de bureau ou les appareils Internet des objets.

  • Vous souhaitez mettre en œuvre vos propres techniques de vérification sur n'importe quelle plateforme.

Aperçu

Pour implémenter un fournisseur App Check personnalisé, vous avez besoin d'un environnement backend sécurisé capable d'exécuter le SDK d'administration Firebase Node.js. Il peut s'agir de Cloud Functions, d'une plateforme de conteneurs telle que Cloud Run ou de votre propre serveur.

À partir de cet environnement, vous fournirez un service accessible au réseau qui recevra une preuve d'authenticité de la part de vos clients d'application et, si la preuve d'authenticité réussit votre évaluation d'authenticité, renverra un jeton App Check. Les indicateurs spécifiques que vous utilisez comme preuve d'authenticité dépendront soit du fournisseur tiers que vous utilisez, soit des indicateurs de votre propre invention, si vous implémentez une logique personnalisée.

Habituellement, vous exposez ce service en tant que point de terminaison REST ou gRPC, mais ce détail dépend de vous.

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

  1. Installez et initialisez le SDK Admin .

  2. Créez un point de terminaison accessible au réseau qui peut recevoir les données d'authenticité de vos clients. Par exemple, en utilisant 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 rédiger vous-même.

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

    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 pouvez pas vérifier l'authenticité du client, renvoyez une erreur (par exemple, renvoyez une erreur HTTP 403).

  5. Facultatif : définissez la durée de vie (TTL) des jetons App Check émis par votre fournisseur personnalisé en transmettant un objet AppCheckTokenOptions à createToken() . Vous pouvez définir la durée de vie sur n'importe quelle valeur comprise entre 30 minutes et 7 jours. Lorsque vous définissez cette valeur, tenez compte des compromis suivants :

    • Sécurité : des durées de vie plus courtes offrent une sécurité renforcée, car elles réduisent la fenêtre pendant laquelle un jeton divulgué ou intercepté peut être abusé par un attaquant.
    • Performances : des durées de vie plus courtes signifient que votre application effectuera une attestation plus fréquemment. Étant donné que le processus d’attestation d’application ajoute de la latence aux requêtes réseau à chaque fois qu’il est exécuté, une courte durée de vie peut avoir un impact sur les performances de votre application.

    La durée de vie par défaut de 1 heure est raisonnable pour la plupart des applications.

Prochaines étapes

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 .