App Check-Erzwingung für Cloud Functions aktivieren

Wenn Sie wissen, welche Auswirkungen App Check auf Ihre Nutzer hat und fortfahren möchten, können Sie die Erzwingung von App Check aktivieren.

Erzwingung aktivieren

Um mit dem Erzwingen von App Check-Tokenanforderungen in Ihrem Callable zu beginnen Cloud Functions, ändern Sie die Funktionen, um zu prüfen, ob App Check gültig ist Tokens, wie unten gezeigt. 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 neuer:

    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-Erzwingung für die 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.

Wiederholungsschutz (Beta)

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

Beachten Sie, dass mit dem Wiederholungsschutz ein Netzwerk-Umlauf zum Token hinzugefügt wird. Dadurch wird die Latenz für den Cloud Functions-Aufruf erhöht. In diesem Fall ist bei den meisten Apps der Replay-Schutz in der Regel nur auf bestimmten sensible Endpunkte.

So verbrauchen Sie Tokens:

  1. Im Cloud Console „Firebase App Check Token Verifier“ gewähren Rolle für das Dienstkonto von der Cloud Functions-Funktion verwendet werden.

    • Wenn Sie das Admin SDK explizit initialisieren und Ihre die Anmeldedaten des Admin SDK-Dienstkontos enthält, 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, 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. Aktualisiere deinen App-Clientcode, um Verbrauchsgüter mit begrenzter Nutzung zu erhalten Tokens 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();