App Check-Erzwingung für Cloud Functions aktivieren

Wenn Sie wissen, wie sich App Check auf Ihre Nutzer auswirkt und Sie bereit sind, fortzufahren, können Sie die App Check Erzwingung für aufrufbare Funktionen aktivieren.

Erzwingung aktivieren

Wenn Sie die Anforderungen an App Check Token in Ihren aufrufbaren Funktionen erzwingen möchten, ändern Sie Ihre Funktionen so, dass sie nach gültigen App Check Tokens suchen, wie unten gezeigt. Nachdem Sie die Erzwingung aktiviert haben, werden alle nicht bestätigten Anfragen abgelehnt.

  1. Installieren Sie das Cloud Functions SDK.

    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"

    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"

    Python (Vorschau)

    Fügen Sie firebase-functions zu functions/requirements.txt hinzu:

    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-Erzwingung für Ihre Funktion:

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

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

    Python (Vorschau)

    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
    

Nachdem diese Änderungen bereitgestellt wurden, benötigen Ihre aufrufbaren Funktionen gültige App Check Tokens. Die Cloud Functions Client-SDKs fügen automatisch ein App Check Token an, wenn Sie eine aufrufbare Funktion aufrufen.

Wiedergabeschutz (Beta)

Wenn Sie eine aufrufbare Funktion vor Wiedergabeangriffen schützen möchten, können Sie das App Check-Token nach der Bestätigung verwenden. Sobald das Token verwendet wurde, kann es nicht mehr verwendet werden.

Durch die Verwendung des Wiedergabeschutzes wird der Tokenbestätigung ein Netzwerk-Roundtrip hinzugefügt, wodurch die Latenz des Funktionsaufrufs erhöht wird. Aus diesem Grund aktivieren die meisten Apps den Wiedergabeschutz in der Regel nur für besonders sensible Endpunkte.

So verwenden Sie Tokens:

  1. Gewähren Sie in der Google Cloud Konsole, dem Dienstkonto, das von der Funktion verwendet wird, die Rolle „Firebase App Check-Token-Bestätiger“.

    • Wenn Sie das Admin SDK explizit initialisieren und die Anmeldedaten des Admin SDK-Dienstkontos Ihres Projekts angegeben haben, ist 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, gewähren Sie die Rolle dem Compute-Standarddienstkonto.
  2. Setzen Sie consumeAppCheckToken in Ihrer Funktionsdefinition auf true:

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

    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.
          ...
      });
    
  3. Aktualisieren Sie den Clientcode Ihrer App, um beim Aufrufen der Funktion verwendbare Tokens mit eingeschränkter Nutzung zu erwerben:

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