Abilita l'applicazione di App Check per Cloud Functions

Una volta compreso l'impatto di App Check sui tuoi utenti e quando sei pronto per procedere, puoi abilitare l'applicazione di App Check.

Abilitazione dell'applicazione

Per iniziare ad applicare i requisiti dei token App Check nelle funzioni Cloud Functions richiamabili, modifica le funzioni per verificare la validità dei token App Check, come mostrato di seguito. Una volta abilitata l'applicazione, tutte le richieste non verificate verranno rifiutate.

  1. Installa l'SDK di Cloud Functions.

    Node.js (1a generazione)

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

    npm install firebase-functions@">=4.0.0"
    

    Node.js (2a generazione)

    Aggiorna la dipendenza firebase-functions del tuo 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 tuo 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 (1a generazione)

    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 (2a generazione)

    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 (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. Ridistribuisci le tue funzioni:

    firebase deploy --only functions
    

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

Protezione dalla riproduzione (beta)

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

Tieni presente che l'utilizzo della protezione dalla riproduzione aggiunge un viaggio di andata e ritorno di rete alla verifica del token e pertanto aggiunge latenza alla chiamata alla funzione cloud. Per questo motivo, la maggior parte delle app in genere abilita la protezione dalla riproduzione solo su endpoint particolarmente sensibili.

Per consumare token:

  1. Nella console Cloud , concedi il ruolo "Firebase App Check Token Verifier" all'account di servizio utilizzato da Cloud Function.

    • Se stai inizializzando in modo esplicito Admin SDK e hai specificato le credenziali dell'account di servizio Admin SDK del tuo progetto, il ruolo richiesto è già concesso.
    • Se utilizzi Cloud Functions di prima generazione con la configurazione Admin SDK predefinita, concedi il ruolo all'account di servizio predefinito di App Engine . Vedere Modifica delle autorizzazioni dell'account di servizio .
    • Se utilizzi Cloud Functions di seconda generazione con la configurazione Admin SDK predefinita, concedi il ruolo all'account del servizio di calcolo predefinito .
  2. Imposta consumeAppCheckToken su true nella definizione della funzione:

    Node.js (1a generazione)

    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 (2a generazione)

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

    Veloce

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

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