Implémenter Firebase App Check pour protéger les API contre les clients non autorisés

Lorsque vous appelez une API directement depuis une application mobile ou Web (par exemple, les API qui permettent d'accéder à des modèles d'IA générative), l'API est vulnérable aux utilisations abusives par des clients non autorisés. Pour protéger ces API, vous pouvez utiliser Firebase App Check afin de vérifier que tous les appels d'API entrants proviennent bien de votre application.

Firebase AI Logic fournit une passerelle proxy qui vous permet de vous intégrer à Firebase App Check et de protéger les API de modèles d'IA générative appelées par vos applications mobiles et Web. L'utilisation de App Check avec les SDK Firebase AI Logic est compatible avec toutes nos configurations :

  • Protège les deux fournisseurs de l'"API Gemini" : Gemini Developer API et Vertex AI Gemini API.

  • Protège tous les modèles compatibles, qu'il s'agisse de modèles Gemini ou Imagen.

Résumé général du fonctionnement de App Check

Avec App Check, les appareils exécutant votre application utilisent un fournisseur d'attestation d'application ou d'appareil qui vérifie l'un des éléments suivants ou les deux :

  • Les requêtes proviennent de votre application authentique.
  • Les requêtes proviennent d'un appareil authentique et non modifié.

Cette attestation est jointe à chaque requête effectuée par votre application à l'aide d'un SDK Firebase AI Logic. Lorsque vous activez l'application App Check, les requêtes des clients sans attestation valide sont refusées, tout comme celles provenant d'une application ou d'une plate-forme que vous n'avez pas autorisée.

Nous vous recommandons de vous préparer à la protection renforcée à venir (appelée protection contre la relecture) lorsque vous configurez App Check.

Vous trouverez des informations détaillées sur App Check dans sa documentation, y compris ses quotas et limites.

Fournisseurs disponibles et instructions d'implémentation

La documentation App Check fournit des descriptions des fournisseurs d'attestation ainsi que des instructions d'implémentation.

  1. Choisissez un fournisseur par défaut, puis suivez les instructions d'implémentation disponibles aux liens suivants :

    Notez que si aucun des fournisseurs par défaut ne répond à vos besoins, vous pouvez implémenter un fournisseur personnalisé qui utilise un fournisseur d'attestation tiers ou vos propres techniques d'attestation.

  2. (Recommandé) Préparez-vous à la protection renforcée à venir de App Check (également appelée protection contre la relecture).

  3. (Obligatoire) Avant de mettre votre application à disposition des utilisateurs réels, activez l'application de App Check.

Instanciation spéciale requise pour Flutter

Cliquez sur votre fournisseur Gemini API pour afficher le contenu et le code spécifiques à ce fournisseur sur cette page.

Lorsque vous utilisez App Check avec Firebase AI Logic dans les applications Flutter, vous devez transmettre explicitement App Check lors de l'instanciation, comme suit :

// ...

final ai = await FirebaseAI.googleAI(
  appCheck: FirebaseAppCheck.instance, // for Flutter, pass in App Check explicitly
);

// ...

Se préparer à la protection renforcée à venir

L'utilisation de jetons à usage limité n'est actuellement disponible que pour les plates-formes Apple (v12.2.0+), Android (v17.2.0+, BoM v34.2.0+) et Web (v12.3.0+).
La prise en charge d'autres plates-formes sera déployée au cours des prochaines semaines.

Par défaut, App Check utilise des jetons de session dont la durée de vie (TTL) est configurable et comprise entre 30 minutes et 7 jours. Ces jetons de session sont mis en cache par le SDK App Check et envoyés avec les requêtes de votre application.

À l'avenir, App Check ajoutera l'option permettant d'activer la protection contre la réutilisation pour Firebase AI Logic (semblable à la compatibilité que App Check offre déjà pour certaines autres ressources). Lorsque la protection contre la relecture est activée, elle renforce la protection de la manière suivante :

  • App Check n'autorisera les requêtes que si elles sont accompagnées d'un type spécial de jeton appelé jeton à usage limité.

  • Une fois le jeton à usage limité validé, il est consommé et ne peut donc être utilisé qu'une seule fois, ce qui permet d'éviter les attaques par relecture.

Pour vous préparer à la protection contre la réutilisation, nous vous recommandons d'activer l'utilisation de jetons à usage limité lors de la configuration de App Check. Ainsi, lorsque la protection contre la relecture sera disponible, vous pourrez l'activer plus tôt, car un plus grand nombre de vos utilisateurs utiliseront des versions de votre application qui envoient des jetons à usage limité.

Si vous activez l'utilisation de jetons à usage limité dans votre application maintenant (alors que la protection contre la réutilisation n'est pas disponible), tenez compte des points suivants :

  • App Check ne bloque pas l'utilisation de jetons de session valides.

  • Comme les jetons de session, les jetons à usage limité sont mis en cache par le SDK App Check et envoyés avec les requêtes. Ces jetons à usage limité offrent une petite protection supplémentaire par rapport aux jetons de session par défaut, car ils ont une durée de vie (TTL) plus courte (5 minutes seulement, et non ajustable) que les jetons de session.

  • Même si les jetons à usage limité sont valides pendant 5 minutes, le SDK générera toujours un nouveau jeton pour chaque requête. Ce processus peut ajouter une certaine latence à votre demande.

Toutefois, lorsque la protection contre la relecture sera disponible pour Firebase AI Logic (et que vous l'activerez), l'utilisation de jetons de session et la réutilisation de jetons à usage limité ne seront pas possibles. Notez que la latence supplémentaire pour générer un nouveau jeton pour chaque requête se produira toujours.

Activer l'utilisation de jetons à usage limité

Cliquez sur votre fournisseur Gemini API pour afficher le contenu et le code spécifiques à ce fournisseur sur cette page.

Voici comment activer l'utilisation des jetons à usage limité :

  1. Implémentez App Check et assurez-vous d'avoir activé l'application App Check pour votre application.

  2. Dans votre application, lors de l'instanciation, activez l'utilisation de jetons à usage limité en définissant le paramètre useLimitedUseAppCheckTokens sur true :

    Swift

    
    // ...
    
    // During instantiation, enable usage of limited-use tokens
    let ai = FirebaseAI.firebaseAI(
      backend: .googleAI(),
      useLimitedUseAppCheckTokens: true
    )
    
    // ...
    
    

    Kotlin

    
    // ...
    
    // During instantiation, enable usage of limited-use tokens
    val ai = Firebase.ai(
      backend = GenerativeBackend.googleAI(),
      useLimitedUseAppCheckTokens = true
    )
    
    // ...
    
    

    Java

    
    // ...
    
    // During instantiation, enable usage of limited-use tokens
    FirebaseAI ai = FirebaseAI.getInstance(
      /* backend: */ GenerativeBackend.googleAI(),
      /* useLimitedUseAppCheckTokens: */ true
    );
    
    // ...
    
    

    Web

    
    // ...
    
    // During instantiation, enable usage of limited-use tokens
    const ai = getAI(firebaseApp, {
      backend: new GoogleAIBackend(),
      useLimitedUseAppCheckTokens: true
    });
    
    // ...
    
    

    Dart

    L'utilisation de jetons à usage limité avec les applications Flutter sera prise en charge dans la prochaine version. Veuillez réessayer ultérieurement.

    Unity

    L'utilisation de jetons à usage limité avec les jeux Unity sera prise en charge dans une prochaine version. Veuillez réessayer ultérieurement.

Comprendre comment Firebase AI Logic s'intègre à App Check

Pour utiliser les SDK Firebase AI Logic, l'API Firebase AI Logic (firebasevertexai.googleapis.com) doit être activée dans votre projet Firebase. En effet, les requêtes effectuées par les SDK Firebase AI Logic sont d'abord envoyées au serveur Firebase AI Logic, qui sert de passerelle proxy où la validation Firebase App Check a lieu avant que la requête ne soit autorisée à accéder au backend de votre fournisseur"Gemini API" choisi et aux API pour accéder aux modèles Gemini et Imagen.