Włącz wymuszanie Sprawdzania aplikacji w Cloud Functions

Gdy zrozumiesz, jak App Check wpłynie na Twoich użytkowników i będziesz gotowy(-a) do dalszych działań, możesz włączyć wymuszanie App Check w przypadku funkcji, które można wywoływać.

Włącz egzekwowanie

Aby zacząć wymuszać wymagania dotyczące tokenów App Check w funkcjach, które można wywoływać , zmodyfikuj je tak, aby sprawdzały, czy tokeny App Check są prawidłowe, jak pokazano poniżej. Gdy włączysz wymuszanie, wszystkie niezweryfikowane żądania będą odrzucane.

  1. Zainstaluj pakiet Cloud Functions SDK.

    Node.js (2. generacja)

    Zaktualizuj zależność firebase-functions w projekcie do wersji 4.0.0 lub nowszej:

    npm install firebase-functions@">=4.0.0"

    Node.js (1. generacja)

    Zaktualizuj zależność firebase-functions w projekcie do wersji 4.0.0 lub nowszej:

    npm install firebase-functions@">=4.0.0"

    Python (wersja zapoznawcza)

    Dodaj firebase-functions do functions/requirements.txt:

    firebase-functions >= 0.1.0
    

    Następnie zaktualizuj zależności w środowisku wirtualnym projektu:

    ./venv/bin/pip install -r requirements.txt
    
  2. Włącz opcję wymuszania Sprawdzania aplikacji w środowisku wykonawczym funkcji:

    Node.js (2. generacja)

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

    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 (wersja zapoznawcza)

    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. Wdróż ponownie swoje funkcje:

    firebase deploy --only functions
    

Po wdrożeniu tych zmian funkcje, które można wywoływać, będą wymagać prawidłowych App Check tokenów. Pakiety Cloud Functions Client SDK automatycznie dołączają token App Check gdy wywołujesz funkcję, którą można wywoływać.

Ochrona przed powtórzeniem (beta)

Aby chronić funkcję, którą można wywoływać, przed atakami typu replay, możesz wykorzystać token Sprawdzania aplikacji po jego zweryfikowaniu. Gdy token zostanie wykorzystany, nie będzie można go użyć ponownie.

Pamiętaj, że używanie ochrony przed powtórzeniem powoduje dodatkową podróż w obie strony w sieci w celu zweryfikowania tokena, a tym samym zwiększa opóźnienie wywołania funkcji. Z tego powodu większość aplikacji zwykle włącza ochronę przed powtórzeniem tylko w przypadku szczególnie wrażliwych punktów końcowych.

Aby wykorzystać tokeny:

  1. W Google Cloud konsoli, przyznaj rolę „Weryfikator tokenów Sprawdzania aplikacji Firebase” kontu usługi używanemu przez funkcję.

    • Jeśli jawnie inicjujesz pakiet Admin SDK i masz podane dane logowania konta usługi pakietu Admin SDK projektu, wymagana rola jest już przyznana.
    • Jeśli używasz Cloud Functions 1. generacji z domyślną konfiguracją pakietu Admin SDK, przyznaj rolę domyślnemu kontu usługi App Engine. Więcej informacji znajdziesz w artykule Zmienianie uprawnień konta usługi.
    • Jeśli używasz Cloud Functions 2. generacji z domyślną konfiguracją pakietu Admin SDK, przyznaj rolę domyślnemu kontu usługi Compute Engine.
  2. W definicji funkcji ustaw consumeAppCheckToken na true:

    Node.js (2. generacja)

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

    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. Zaktualizuj kod klienta aplikacji, aby podczas wywoływania funkcji uzyskiwać tokeny jednorazowe o ograniczonym użyciu:

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