Abilita l'applicazione di App Check per Cloud Functions

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

Attivazione dell'applicazione

Per iniziare a applicare i requisiti dei token App Check nel codice callableCloud Functions, 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 (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 (2ª gen.)

    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 quindi 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 implementate queste modifiche, il tuo Cloud Functions richiamabile richiederà token App Check 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 dagli attacchi di replay, puoi utilizzare il token App Check dopo averlo verificato. Una volta utilizzato, il token non può essere usato nuovamente.

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

Per consumare i token:

  1. Nella console Cloud, concedi il ruolo "Verificatore token di Firebase App Check" all'account di servizio utilizzato dalla funzione Cloud.

    • Se stai inizializzando esplicitamente l'SDK Admin e hai specificato le credenziali dell'account di servizio SDK Admin del tuo progetto, il ruolo richiesto è 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 2ª generazione con la configurazione predefinita dell'SDK amministratore, concedi il ruolo all'account di servizio di calcolo predefinito.
  2. Imposta consumeAppCheckToken su true nella definizione della 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.
          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 acquisire token di uso 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 {
        // ...
    }
    

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