Gdy poznasz wpływ App Check na użytkowników i będziesz gotowy do dalszych działań, możesz włączyć egzekwowanie App Check.
Włączanie wymuszania
Aby rozpocząć egzekwowanie wymagań dotyczących tokenów App Check w elemencie wywołania Cloud Functions, zmodyfikuj funkcje, aby sprawdzić poprawność App Check tokeny, jak pokazano poniżej. Gdy włączysz wymuszanie, wszystkie niezweryfikowane żądania będą odrzucane.
Zainstaluj pakiet SDK Cloud Functions.
Node.js (1 generacji)
Zaktualizuj zależność
firebase-functions
w projekcie do wersji 4.0.0 lub nowszej: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
dofunctions/requirements.txt
:firebase-functions >= 0.1.0
Następnie zaktualizuj zależności w środowisku wirtualnym projektu:
./venv/bin/pip install -r requirements.txt
Włącz opcję wymuszania Sprawdzania aplikacji w przypadku swojej funkcji:
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. ... });
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. ...
Wdróż ponownie funkcje:
firebase deploy --only functions
Po wdrożeniu tych zmian wywoływalna usługa Cloud Functions będzie wymagać prawidłowych tokenów App Check. Pakiety SDK klienta Cloud Functions automatycznie dołącza token App Check przy wywoływaniu funkcji możliwej do wywołania.
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. Z tego powodu większość aplikacji zwykle włącza ochronę przed odtwarzaniem tylko na szczególnie wrażliwych punktach końcowych.
Aby wykorzystać tokeny:
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 Cloud Functions pierwszej generacji z domyślną konfiguracją AdminSDK, przypisz tę rolę do domyślnego konta 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 .
W definicji funkcji ustaw wartość
consumeAppCheckToken
natrue
: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. ... } );
Zaktualizuj kod klienta aplikacji, aby po wywołaniu funkcji pobierać tokeny do jednorazowego użytku:
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();