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ć egzekwowanie App Check w przypadku funkcji wywoływanych.

Włączanie wymuszania weryfikacji dwuetapowej

Aby zacząć egzekwować App Check wymagania dotyczące tokenów w funkcjach wywoływanych, zmodyfikuj funkcje tak, aby sprawdzały, czy tokeny App Check są prawidłowe, jak pokazano poniżej. Po włączeniu wymuszania wszystkie niezweryfikowane żądania będą odrzucane.

  1. Zainstaluj pakiet SDK Cloud Functions.

    Node.js (2 generacji)

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

    npm install firebase-functions@">=4.0.0"

    Node.js (1 generacji)

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

    npm install firebase-functions@">=4.0.0"

    Python (wersja testowa)

    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ę środowiska wykonawczego wymuszania Sprawdzania aplikacji w przypadku funkcji:

    Node.js (2 generacji)

    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 generacji)

    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 testowa)

    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. Ponownie wdróż funkcje:

    firebase deploy --only functions
    

Po wdrożeniu tych zmian funkcje wywoływalne będą wymagać prawidłowych tokenów App Check. Pakiety SDK klienta Cloud Functions automatycznie dołączają token App Check, gdy wywołujesz funkcję wywoływaną.

Ochrona przed powtórzeniem (beta)

Aby chronić funkcję wywoływaną przed atakami typu replay, możesz wykorzystać token App Check po jego zweryfikowaniu. Po wykorzystaniu tokena nie można go ponownie użyć.

Pamiętaj, że użycie ochrony przed powtórzeniem powoduje dodatkową podróż w obie strony w sieci podczas weryfikacji tokena, a tym samym zwiększa czas oczekiwania na wywołanie funkcji. Z tego powodu większość aplikacji włącza ochronę przed powtórzeniem tylko w przypadku szczególnie wrażliwych punktów końcowych.

Aby wykorzystać tokeny:

  1. W Google Cloudkonsoli przypisz rolę „Weryfikator tokenów App Check Firebase” do konta usługi używanego przez funkcję.

    • Jeśli jawnie inicjujesz pakiet SDK administratora i określisz dane logowania konta usługi pakietu SDK administratora projektu, wymagana rola zostanie już przyznana.
    • Jeśli używasz funkcji Cloud Functions 1 generacji z domyślną konfiguracją pakietu Admin SDK, przyznaj rolę domyślnemu kontu usługi App Engine. Zobacz Zmiana uprawnień konta usługi.
    • Jeśli używasz funkcji Cloud Functions 2 generacji z domyślną konfiguracją pakietu Admin SDK, przyznaj rolę domyślnemu kontu usługi Compute.
  2. W definicji funkcji ustaw consumeAppCheckToken na true:

    Node.js (2 generacji)

    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 generacji)

    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 uzyskiwać jednorazowe tokeny o ograniczonym zastosowaniu, gdy wywołujesz funkcję:

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