Empêchez l'utilisation abusive de l'API Gemini avec Firebase App Check

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 contre les utilisations abusives, vous pouvez utiliser Firebase App Check afin de vérifier que tous les appels d'API entrants proviennent de votre application réelle et d'un appareil non altéré.

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èle d'IA générative appelées par vos applications mobiles et Web. L'utilisation de App Check avec les Firebase AI Logic SDK est compatible avec toutes nos configurations :

  • Protège les deux fournisseurs d'API Gemini : Gemini Developer API et Agent Platform Gemini API (formerly Vertex AI).

  • Protège tous les modèles compatibles, à la fois les Gemini modèles et les Imagen modèles.

App Check est également compatible avec la protection contre les attaques de répétition, ce qui signifie qu'un jeton App Check ne peut être utilisé qu'une seule fois.

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, voire les deux :

  • Les requêtes proviennent de votre application authentique.
  • Les requêtes proviennent d'un appareil authentique qui n'a pas été altéré.

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

Lorsque vous configurez App Check, envisagez d'ajouter une protection contre les attaques de répétition, qui rend les jetons App Check à usage unique. Cette option offre une protection améliorée au-delà de la protection de base et vous permet de définir un niveau de protection approprié pour votre application et vos cas d'utilisation.

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

Configurer App Check

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

  1. Choisissez un fournisseur d'attestation et suivez les instructions d'implémentation en cliquant sur les liens suivants :

    Notez que si aucun de ces fournisseurs d'attestation 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. (Obligatoire) Appliquez App Check avant de valider votre application dans un système de contrôle de code source accessible au public, de la partager ou de la rendre publique.

  3. (Recommandé) Améliorez la protection en ajoutant une protection contre les attaques de répétition, ce qui signifie qu'un jeton App Check ne peut être utilisé qu'une seule fois.

  4. Pour le développement local lorsque App Check est appliqué, configurez le App Check fournisseur de débogage afin de contourner l'attestation tout en maintenant l'application de App Check. Consultez les instructions de configuration pour votre plate-forme : iOS+ | Android | Web | Flutter | Unity.

Améliorer la protection en ajoutant une protection contre les attaques de répétition

Nous vous recommandons d'utiliser les dernières versions du SDK, mais assurez-vous d'utiliser au moins l'une de ces versions pour utiliser la protection contre les attaques de répétition :
Plates-formes Apple v12.2.0 ou version ultérieure | Android BoM v34.14.0 ou version ultérieure (App Check v19.1.0 ou version ultérieure) | Web v12.14.0 ou version ultérieure | Flutter v4.15.0 ou version ultérieure (App Check v4.10.0 ou version ultérieure) | Unity v13.12.0 ou version ultérieure

Par défaut, App Check utilise des jetons de session dont la valeur TTL (Time To Live) est configurable entre 30 minutes et 7 jours. Ces jetons de session sont mis en cache par le SDK App Check, sont envoyés avec les requêtes de votre application et peuvent être réutilisés jusqu'à l'expiration de leur valeur TTL. L'utilisation de jetons de session est considérée comme une protection de base.

Toutefois, vous pouvez améliorer la protection au-delà de cette protection de base en appliquant une protection contre les attaques de répétition, qui utilise des jetons à usage limité. Lorsque la protection contre les attaques de répétition est appliquée, voici ce qui se produit :

  • App Check bloquera les requêtes adressées à Firebase AI Logic qui utilisent des jetons de session. Au lieu de cela, App Check autorise uniquement une requête à Firebase AI Logic si elle utilise un jeton à usage limité nouvellement créé.

  • Une fois le jeton à usage limité validé, il est consommé afin de ne pouvoir être utilisé qu'une seule fois, ce qui empêche les attaques de répétition.

  • Le App Check SDK génère un nouveau jeton à usage limité pour chaque requête. Notez que ce processus peut avoir un impact sur vos requêtes en ajoutant une certaine latence et parfois un coût (en fonction de votre fournisseur d'attestation).

Configurer et appliquer la protection contre les attaques de répétition

Cliquez sur votre fournisseur Gemini API pour afficher le contenu spécifique au fournisseur et le code sur cette page.

Voici comment configurer et appliquer la protection contre les attaques de répétition :

  1. Si ce n'est pas déjà fait, implémentez App Check et activez l'application App Check pour votre application.

  2. Activez l'utilisation de jetons à usage limité.

    Dans votre application lors de l'instanciation, définissez 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

    
    // ...
    
    // During instantiation, enable usage of limited-use tokens
    final ai = await FirebaseAI.googleAI(
      useLimitedUseAppCheckTokens: true,
    );
    
    // ...
    
    

    Unity

    // ...
    
    // During instantiation, enable usage of limited-use tokens
    var ai = FirebaseAI.GetInstance(
      useLimitedUseAppCheckTokens: true
    );
    
    // ...
    
  3. Appliquez la protection contre les attaques de répétition.

    1. Dans la base de code de votre application, assurez-vous d'avoir activé l'utilisation de jetons à usage limité (voir l'étape précédente).

    2. Dans la console Firebase, accédez à Sécurité > App Check.

    3. Développez la vue des métriques pour Firebase AI Logic.

    4. Assurez-vous que Protection de base est appliquée, puis cliquez sur Continuer.

    5. Pour la protection contre les attaques de répétition, choisissez Non appliqué (surveillance uniquement) ou Appliqué.

      Tenez compte des points suivants pour décider quand appliquer la protection contre les attaques de répétition :

      • Il est recommandé de surveiller vos requêtes si un nombre important de vos utilisateurs sont susceptibles d'utiliser des versions antérieures de votre application sans que l'utilisation de jetons à usage limité soit activée. Si vous appliquez immédiatement la protection contre les attaques de répétition, les requêtes de ces utilisateurs seront bloquées.

      • Vous pouvez surveiller spécifiquement la métrique Non validé : jeton réutilisé, qui correspond au nombre de requêtes comportant un jeton déjà utilisé dans une requête précédente. Surveillez cette métrique dans la Firebase console (accédez à l'onglet Sécurité > App Check > API).

        Si une partie importante des requêtes récentes appartient à cette catégorie, vous pouvez éviter de perturber les utilisateurs et envisager d'attendre pour appliquer la protection contre les attaques de répétition jusqu'à ce que davantage d'utilisateurs aient effectué la mise à jour vers une version de votre application qui utilise des jetons à usage limité.

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

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

(Facultatif) Appliquer App Check sans fournisseur d'attestation de production (fournisseur de débogage uniquement)

Vous pouvez appliquer App Check pour AI Logic sans enregistrer votre application auprès d' un fournisseur d'attestation de production. Cette configuration vous permet d'utiliser le App Check fournisseur de débogage pour commencer plus facilement avec AI Logic tout en protégeant le Gemini API.

  1. Vérifiez si App Check est déjà appliqué pour AI Logic.

    1. Dans la console Firebase, accédez à l'onglet Sécurité > App Check > API.

    2. Recherchez la ligne correspondant à Firebase AI Logic. Si la valeur Unenforced s'affiche, passez au reste de ces instructions.

  2. Cliquez sur la ligne correspondant à Firebase AI Logic pour afficher des graphiques de métriques. Sous ces graphiques, cliquez sur Configurer.

  3. Sur le premier écran de la boîte de dialogue (Protection de base), sélectionnez Appliqué, puis cliquez sur Continuer.

  4. Sur l'écran suivant (Protection contre les attaques de répétition), sélectionnez Désactivé. Vous pouvez toujours configurer cette option ultérieurement et revenir à ce workflow de configuration. Cliquez sur Continuer.

  5. Sur l'écran final, examinez les points à prendre en compte pour appliquer App Check afin de vous assurer que vous êtes prêt à le faire.App Check Si vous êtes prêt, cliquez sur Continuer.

    Vous n'avez pas besoin d'enregistrer vos applications si vous souhaitez uniquement appliquer App Check et utiliser uniquement le fournisseur de débogage avec AI Logic dans une application de préproduction. Toutefois, lorsque vous êtes prêt à publier votre application auprès des utilisateurs finaux, vous devez enregistrer vos applications dans le cadre de la configuration d'un fournisseur d'attestation de production (tel qu'App Attest, Play Integrity ou reCAPTCHA Enterprise).

  6. Pour le développement local lorsque App Check est appliqué, vous devez configurer le App Check fournisseur de débogage afin de contourner l'attestation tout en maintenant l'application de App Check.

    Pour en savoir plus sur la configuration du fournisseur de débogage, consultez les instructions pour votre plate-forme : iOS+ | Android | Web | Flutter | Unity.