Activer l'application App Check pour Cloud Functions

Une fois que vous comprendrez l'impact de App Check sur vos utilisateurs et que vous serez prêt à continuer, vous pourrez activer l'application de App Check.

Activation de l'application forcée

Pour commencer à appliquer les exigences concernant les jetons App Check dans votre Cloud Functions appelable, modifiez vos fonctions pour rechercher des jetons App Check valides, comme indiqué ci-dessous. Une fois l'application activée, toutes les requêtes non validées sera rejetée.

  1. Installez le SDK Cloud Functions.

    Node.js (1re génération)

    Mettez à jour la dépendance firebase-functions de votre projet vers la version 4.0.0 ou une version ultérieure :

    npm install firebase-functions@">=4.0.0"

    Node.js (2e génération)

    Mettez à jour la dépendance firebase-functions de votre projet vers la version 4.0.0 ou une version ultérieure :

    npm install firebase-functions@">=4.0.0"

    Python (preview)

    Ajoutez firebase-functions à functions/requirements.txt:

    firebase-functions >= 0.1.0
    

    Ensuite, mettez à jour les dépendances dans l'environnement virtuel de votre projet:

    ./venv/bin/pip install -r requirements.txt
    
  2. Activez l'option d'exécution d'application d'App Check pour votre fonction:

    Node.js (1re génération)

    const functions = require("firebase-functions/v1");
    
    exports.yourV1CallableFunction = functions
      .runWith({
          enforceAppCheck: true, // Reject requests with missing or invalid App Check tokens.
      })
      .https.onCall((data, context) => {
            // context.app contains data from App Check, including the app ID.
            // Your function logic follows.
            ...
      });
    

    Node.js (2e génération)

    const { onCall } = require("firebase-functions/v2/https");
    
    exports.yourV2CallableFunction = onCall(
      {
        enforceAppCheck: true, // Reject requests with missing or invalid App Check tokens.
      },
      (request) => {
        // request.app contains data from App Check, including the app ID.
        // Your function logic follows.
        ...
      }
    );
    

    Python (preview)

    from firebase_functions import https_fn
    
    @https_fn.on_call(
        enforce_app_check=True  # Reject requests with missing or invalid App Check tokens.
    )
    def your_callable_function(req: https_fn.CallableRequest) -> https_fn.Response:
        # req.app contains data from App Check, including the app ID.
        # Your function logic follows.
        ...
    
  3. Redéployez vos fonctions:

    firebase deploy --only functions
    

Une fois ces modifications déployées, votre Cloud Functions appelable nécessitera des jetons App Check valides. Les SDK client Cloud Functions automatiquement associer un jeton App Check lorsque vous appelez une fonction appelable.

Protection contre la relecture (bêta)

Pour protéger une fonction appelable contre les attaques par rejeu, vous pouvez utiliser le jeton App Check après l'avoir validé. Une fois le jeton utilisé, il ne peut plus être utilisé.

Notez que la protection contre la rejeu ajoute un aller-retour réseau au jeton la validation, et ajoute donc de la latence à l'appel de fonction Cloud. C'est pourquoi la plupart des applications n'activent généralement la protection contre la relecture que sur les points de terminaison particulièrement sensibles.

Pour utiliser des jetons:

  1. Dans la console Cloud, accorder le "vérificateur de jetons Firebase App Check" au compte de service utilisées par la fonction Cloud.

    • Si vous initialisez explicitement le SDK Admin et que vous avez spécifié les identifiants du compte de service du SDK Admin de votre projet, le rôle requis est déjà accordé.
    • Si vous utilisez des fonctions Cloud Functions de 1re génération avec l'administrateur par défaut Configuration du SDK, attribuez le rôle au service App Engine par défaut compte. Consultez la section Modifier les autorisations des comptes de service.
    • Si vous utilisez des fonctions Cloud Functions de 2e génération avec l'administrateur par défaut Configuration du SDK, accordez le rôle au service de calcul par défaut compte.
  2. Définissez consumeAppCheckToken sur true dans la définition de votre fonction:

    Node.js (1re génération)

    const functions = require("firebase-functions/v1");
    
    exports.yourV1CallableFunction = functions
      .runWith({
          enforceAppCheck: true, // Reject requests with missing or invalid App Check tokens.
          consumeAppCheckToken: true  // Consume the token after verification.
      })
      .https.onCall((data, context) => {
          // context.app contains data from App Check, including the app ID.
          // Your function logic follows.
          ...
      });
    

    Node.js (2e génération)

    const { onCall } = require("firebase-functions/v2/https");
    
    exports.yourV2CallableFunction = onCall(
      {
        enforceAppCheck: true, // Reject requests with missing or invalid App Check tokens.
        consumeAppCheckToken: true  // Consume the token after verification.
      },
      (request) => {
        // request.app contains data from App Check, including the app ID.
        // Your function logic follows.
        ...
      }
    );
    
  3. Mettez à jour le code client de votre appli pour acquérir des consommables à usage limité jetons lorsque vous appelez la fonction:

    Swift

    let options = HTTPSCallableOptions(requireLimitedUseAppCheckTokens: true)
    let yourCallableFunction =
        Functions.functions().httpsCallable("yourCallableFunction", options: options)
    do {
        let result = try await yourCallableFunction.call()
    } catch {
        // ...
    }
    

    Web

    import { getFunctions, httpsCallable } from "firebase/functions";
    
    const yourCallableFunction = httpsCallable(
      getFunctions(),
      "yourCallableFunction",
      { limitedUseAppCheckTokens: true },
    );
    await yourCallableFunction();
    

    Kotlin+KTX

    val yourCallableFunction = Firebase.functions.getHttpsCallable("yourCallableFunction") {
        limitedUseAppCheckTokens = true
    }
    val result = yourCallableFunction.call().await()
    

    Java

    HttpsCallableReference yourCallableFunction = FirebaseFunctions.getInstance().getHttpsCallable(
            "yourCallableFunction",
            new HttpsCallableOptions.Builder()
                    .setLimitedUseAppCheckTokens(true)
                    .build()
    );
    Task<HttpsCallableResult> result = yourCallableFunction.call();