Abilita l'applicazione di App Check per Cloud Functions

Quando capisci in che modo App Check influirà sui tuoi utenti e sei pronto per procedere, puoi attivare l'applicazione di App Check per le funzioni richiamabili.

Attiva l'applicazione

Per iniziare a applicare i requisiti dei token App Check nelle tue funzioni chiamabili, modifica le funzioni per verificare la presenza di token App Check validi, come mostrato di seguito. Una volta attivata l'applicazione, tutte le richieste non verificate verranno rifiutate.

  1. Installa l'SDK Cloud Functions.

    Node.js (2ª gen.)

    Aggiorna la dipendenza firebase-functions del progetto alla versione 4.0.0 o successiva:

    npm install firebase-functions@">=4.0.0"

    Node.js (1ª gen.)

    Aggiorna la dipendenza firebase-functions del progetto alla versione 4.0.0 o successiva:

    npm install firebase-functions@">=4.0.0"

    Python (anteprima)

    Aggiungi firebase-functions a functions/requirements.txt:

    firebase-functions >= 0.1.0
    

    Quindi, aggiorna le dipendenze nell'ambiente virtuale del progetto:

    ./venv/bin/pip install -r requirements.txt
    
  2. Abilita l'opzione di runtime di applicazione di App Check per la tua funzione:

    Node.js (2ª gen.)

    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.
        ...
      }
    );
    

    Node.js (1ª gen.)

    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.
            ...
      });
    

    Python (anteprima)

    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. Esegui nuovamente il deployment delle funzioni:

    firebase deploy --only functions
    

Una volta implementate queste modifiche, le tue funzioni richiamabili richiederanno token App Check validi. Gli SDK client Cloud Functions collegano automaticamente un token App Check quando richiami una funzione chiamabile.

Protezione dalla riproduzione (beta)

Per proteggere una funzione chiamabile dagli attacchi di replay, puoi utilizzare il token App Check dopo averlo verificato. Una volta utilizzato, il token non può essere riutilizzato.

Tieni presente che l'utilizzo della protezione dal replay aggiunge un round trip di rete alla verifica del token e quindi aggiunge latenza alla chiamata di funzione. Per questo motivo, la maggior parte delle app in genere attiva la protezione dal replay solo sugli endpoint particolarmente sensibili.

Per utilizzare i token:

  1. Nella Google Cloud console, concedi il ruolo "Verificatore token Firebase App Check" al service account utilizzato dalla funzione.

    • Se inizializzi esplicitamente l'Admin SDK e hai specificato le credenziali dell'account di servizio Admin SDK del progetto, il ruolo richiesto è già concesso.
    • Se utilizzi Cloud Functions di prima generazione con la configurazione predefinita dell'SDK Admin, concedi il ruolo all'account di servizio predefinito di App Engine. Consulta Modificare le autorizzazioni dell'account di servizio.
    • Se utilizzi Cloud Functions di seconda generazione con la configurazione predefinita dell'SDK Admin, concedi il ruolo all'account di servizio Compute predefinito.
  2. Imposta consumeAppCheckToken su true nella definizione della funzione:

    Node.js (2ª gen.)

    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.
        ...
      }
    );
    

    Node.js (1ª gen.)

    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.
          ...
      });
    
  3. Aggiorna il codice client dell'app per acquisire token di utilizzo limitato consumabili quando chiami la funzione:

    Swift

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

    Kotlin

    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();
    

    Web

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