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 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è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, à la fois les modèles Gemini et les modèles Imagen.

App Check est également compatible avec la protection contre les attaques par rejeu, 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, ou 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 jointe à chaque requête effectuée par votre application à l'aide d'un SDK Firebase AI Logic. Lorsque App Check est appliqué, les requêtes des clients sans attestation valide sont refusé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, pensez à ajouter une protection contre les attaques de répétition, qui rend les jetons App Check à usage unique. Cette option offre une protection renforcée au-delà de la protection de base. Elle vous permet de définir un niveau de protection adapté à 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, puis suivez les instructions d'implémentation disponibles aux 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) Activez l'application de App Checkmesure d'application avant d'engager votre application dans un système de contrôle du code source accessible au public, de la partager ou de la rendre accessible au public.

  3. (Recommandé) Renforcez la protection en ajoutant 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.

  4. Pour le développement local lorsque App Check est appliqué, configurez le fournisseur de débogage App Check pour 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.

Renforcer la protection en ajoutant une protection contre la relecture

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 la relecture :
Plates-formes Apple : v12.2.0+ | Android BoM : v34.14.0+ (App Check v19.1.0+) | Web : v12.14.0+ | Flutter : v4.15.0+ (App Check v4.10.0+) | Unity : v13.12.0+

Par défaut, App Check utilise des jetons de session dont la valeur TTL (Time To Live) est configurable et comprise 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 TTL. L'utilisation de jetons de session est considérée comme une protection de base.

Toutefois, vous pouvez renforcer la protection au-delà de cette protection de base en appliquant la 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 envoyées à Firebase AI Logic qui utilisent des jetons de session. Au lieu de cela, App Check n'autorisera une requête Firebase AI Logic que si elle utilise un jeton à usage limité nouvellement créé.

  • Une fois le jeton à usage limité validé, il est consommé pour ne pouvoir être utilisé qu'une seule fois, ce qui empêche les attaques par relecture.

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

Configurer et appliquer la protection contre la réutilisation

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

Voici comment configurer et appliquer la protection contre la réutilisation :

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

  2. Activez l'utilisation des 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 consoleFirebase, accédez à Sécurité > App Check.

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

    4. Assurez-vous que l'option Protection de base est activée, puis cliquez sur Continuer.

    5. Pour la protection contre la relecture, choisissez Non appliqué (surveillance uniquement) ou Appliqué.

      Pour décider quand appliquer la protection contre la réutilisation, tenez compte des points suivants :

      • Nous vous recommandons de surveiller vos requêtes si un nombre important de vos utilisateurs est susceptible 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 la relecture, les demandes 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 consoleFirebase (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 la réutilisation jusqu'à ce qu'un plus grand nombre d'utilisateurs aient mis à jour leur application vers une version qui utilise des jetons à usage limité.

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 à passer au backend de votre fournisseur"Gemini API" choisi et aux API pour 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 fournisseur de débogage App Check 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 APIs (API) de Sécurité > App Check.

    2. Recherchez la ligne correspondant à Firebase AI Logic. Si le message Unenforced s'affiche, suivez le reste de ces instructions.

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

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

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

  5. Sur le dernier écran, 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 uniquement utiliser le fournisseur de débogage avec AI Logic dans une application de préproduction. Toutefois, lorsque vous êtes prêt à publier votre application pour les utilisateurs finaux, vous devez enregistrer vos applications dans le cadre de la configuration d'un fournisseur d'attestation de production (comme App Attest, Play Integrity ou reCAPTCHA Enterprise).

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

    Pour savoir comment configurer le fournisseur de débogage, consultez les instructions pour votre plate-forme : iOS+ | Android | Web | Flutter | Unity.