App Check-Erzwingung für Cloud Functions aktivieren

Wenn Sie verstanden haben, wie sich App Check auf Ihre Nutzer auswirkt und bereit sind, fortzufahren, können Sie die Durchsetzung von App Check aktivieren.

Erzwingung aktivieren

Wenn Sie die App Check-Tokenanforderungen in Ihrer aufrufbaren Cloud Functions erzwingen möchten, ändern Sie Ihre Funktionen so, dass sie wie unten gezeigt auf gültige App Check-Tokens prüfen. Sobald Sie die Erzwingung aktivieren, werden alle nicht bestätigten Anfragen abgelehnt.

  1. Installieren Sie das Cloud Functions SDK.

    Node.js (1. Generation)

    Aktualisieren Sie die firebase-functions-Abhängigkeit Ihres Projekts auf Version 4.0.0 oder höher:

    npm install firebase-functions@">=4.0.0"

    Node.js (2. Generation)

    Aktualisieren Sie die firebase-functions-Abhängigkeit Ihres Projekts auf Version 4.0.0 oder höher:

    npm install firebase-functions@">=4.0.0"

    Python (Vorabversion)

    firebase-functions zu functions/requirements.txt hinzufügen:

    firebase-functions >= 0.1.0
    

    Aktualisieren Sie dann die Abhängigkeiten in der virtuellen Umgebung Ihres Projekts:

    ./venv/bin/pip install -r requirements.txt
    
  2. Aktivieren Sie die Laufzeitoption für die App Check-Erzwigung für Ihre Funktion:

    Node.js (1. Generation)

    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. Generation)

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

    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. Stellen Sie Ihre Funktionen noch einmal bereit:

    firebase deploy --only functions
    

Sobald diese Änderungen implementiert wurden, sind für deine aufrufbare Cloud Functions gültige App Check-Tokens erforderlich. Die Cloud Functions-Client-SDKs fügen beim Aufruf einer aufrufbaren Funktion automatisch ein App Check-Token hinzu.

Replay-Schutz (Beta)

Wenn Sie eine aufrufbare Funktion vor Replay-Angriffen schützen möchten, können Sie das App Check-Token nach der Überprüfung verwenden. Nach dem Verbrauch kann das Token nicht mehr verwendet werden.

Hinweis: Wenn Sie den Replay-Schutz verwenden, wird der Tokenbestätigung ein Netzwerkumlauf hinzugefügt, was die Latenz des Cloud-Funktionsaufrufs erhöht. Aus diesem Grund aktivieren die meisten Apps den Replay-Schutz in der Regel nur bei besonders sensiblen Endpunkten.

So nimmst du Tokens in Anspruch:

  1. Weisen Sie in der Cloud Console dem Dienstkonto, das von der Cloud-Funktion verwendet wird, die Rolle „Firebase App Check Token Verifier“ zu.

    • Wenn Sie das Admin SDK explizit initialisieren und die Anmeldedaten des Admin SDK-Dienstkontos Ihres Projekts angegeben haben, wurde die erforderliche Rolle bereits gewährt.
    • Wenn Sie Cloud Functions der 1. Generation mit der Standardkonfiguration des Admin SDK verwenden, gewähren Sie die Rolle dem App Engine-Standarddienstkonto. Weitere Informationen finden Sie unter Dienstkontoberechtigungen ändern.
    • Wenn Sie Cloud Functions der 2. Generation mit der Standardkonfiguration des Admin SDK verwenden, weisen Sie die Rolle dem Compute-Standarddienstkonto zu.
  2. Legen Sie in Ihrer Funktionsdefinition consumeAppCheckToken auf true fest:

    Node.js (1. Generation)

    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. Generation)

    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. Aktualisieren Sie den App-Clientcode, um Verbrauchstoken mit begrenzter Verwendung zu erhalten, wenn Sie die Funktion aufrufen:

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