Abilita l'applicazione di App Check per Cloud Functions

Quando hai compreso in che modo App Check influirà sui tuoi utenti e puoi procedere, puoi attivare l'applicazione forzata di App Check.

Attivare l'applicazione

Per iniziare ad applicare i requisiti del token App Check nel chiamante Cloud Functions, modifica le funzioni per verificare la validità App Check come mostrato di seguito. Una volta abilitata l'applicazione, per tutte le richieste non verificate verrà rifiutato.

  1. Installa l'SDK Cloud Functions.

    Node.js (1ª gen.)

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

    npm install firebase-functions@">=4.0.0"

    Node.js (2a generazione)

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

    npm install firebase-functions@">=4.0.0"

    Python (anteprima)

    Aggiungi firebase-functions a functions/requirements.txt:

    firebase-functions >= 0.1.0
    

    Aggiorna poi le dipendenze nell'ambiente virtuale del progetto:

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

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

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

    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 eseguito il deployment di queste modifiche, il Cloud Functions richiamabile richiederà App Check token validi. Gli SDK client Cloud Functions aggiungono automaticamente un token App Check quando richiami una funzione richiamabile.

Protezione da replay (beta)

Per proteggere una funzione richiamabile da attacchi di ripetizione, puoi utilizzare l'app Controlla il token dopo averlo verificato. Una volta utilizzato, il token non può essere usato nuovamente.

Tieni presente che l'utilizzo della protezione dalla riproduzione aggiunge un round trip di rete al token verifica, quindi aggiunge latenza alla chiamata di funzione Cloud Functions. Per questo motivo, la maggior parte delle app attiva in genere la protezione da replay solo su endpoint particolarmente sensibili.

Per utilizzare i token:

  1. Nella Console Cloud Concedere lo strumento "Firebase App Check Token Verifier" all'account di servizio utilizzata dalla funzione Cloud Functions.

    • Se stai inizializzando in modo esplicito l'SDK Admin e hai specificato le credenziali dell'account di servizio SDK Admin del progetto, il ruolo richiesto è l'account è già stato concesso.
    • Se utilizzi Cloud Functions di 1ª generazione con la configurazione predefinita dell'SDK di amministrazione, 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 il ruolo Amministratore SDK, concedi il ruolo al servizio di computing predefinito Google Cloud.
  2. Imposta consumeAppCheckToken su true nella definizione della funzione:

    Node.js (1ª 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 (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.
        ...
      }
    );
    
  3. Aggiorna il codice client dell'app per ottenere un uso limitato utilizzabile di token 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 {
        // ...
    }
    

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