Włącz wymuszanie Sprawdzania aplikacji w Cloud Functions

Gdy zrozumiesz, jak Sprawdzanie aplikacji wpływa na użytkowników i możesz kontynuować, włącz wymuszanie Sprawdzania aplikacji.

Włączanie egzekwowania

Aby rozpocząć egzekwowanie wymagań dotyczących tokena Sprawdzania aplikacji w elemencie wywołania Cloud Functions, zmodyfikuj swoje funkcje, aby sprawdzić, czy istnieje prawidłowe Sprawdzanie aplikacji Jak pokazano poniżej. Po włączeniu wymuszania wszystkie niezweryfikowane żądania zostanie odrzucona.

  1. Zainstaluj pakiet SDK Cloud Functions.

    Node.js (1 generacji)

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

    npm install firebase-functions@">=4.0.0"
    

    Node.js (2 generacji)

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

    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 dla swojej funkcji opcję wymuszania Sprawdzania aplikacji w środowisku wykonawczym:

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

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

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

    firebase deploy --only functions
    

Po wdrożeniu tych zmian funkcje w Cloud Functions, które można wywołać, będą wymagać prawidłowych tokenów Sprawdzania aplikacji. Automatyczne pakiety SDK klienta Cloud Functions dołącza token Sprawdzania aplikacji podczas wywoływania funkcji wywoływanej przez funkcję.

Ochrona ponownego odtwarzania (beta)

Aby zabezpieczyć funkcję, którą można wywołać, przed atakami typu replay, możesz korzystać z aplikacji Sprawdź token po jego zweryfikowaniu. Gdy token zostanie wykorzystany, nie będzie można go użyć ponownie.

Pamiętaj, że użycie zabezpieczenia przed ponownym odtworzeniem powoduje dodanie ruchu sieciowego do tokena. weryfikacji, co zwiększa opóźnienie wywołania funkcji w Cloud Functions. Do tego celu dlatego większość aplikacji włącza ochronę przed ponownym odtwarzaniem tylko lub wrażliwych punktów końcowych.

Aby wykorzystać tokeny:

  1. W Konsola Cloud, przyznać „Firebase App Check Token Verifier”, rolę dla konta usługi wykorzystywanych przez funkcję w Cloud Functions.

    • Jeśli inicjujesz pakiet Admin SDK w sposób jednoznaczny i podałeś(-aś) danych logowania do konta usługi Admin SDK projektu, wymagana rola to już przyznane.
    • Jeśli używasz funkcji w Cloud Functions 1 generacji z domyślnym administratorem Konfiguracja pakietu SDK, przypisz rolę do domyślnej usługi App Engine . Zobacz Zmienianie uprawnień konta usługi.
    • Jeśli używasz funkcji w Cloud Functions 2 generacji z domyślnym administratorem Konfiguracja pakietu SDK; przypisz rolę do domyślnej usługi obliczeniowej .
  2. Ustaw consumeAppCheckToken na true w definicji funkcji:

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

    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.
        ...
      }
    );
    
  3. Zaktualizuj kod klienta aplikacji, aby pozyskać materiały eksploatacyjne do ograniczonego użytku tokeny przy wywołaniu tej funkcji:

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