כשתבין כיצד בדיקת אפליקציות תשפיע על המשתמשים שלך ואתה מוכן להמשיך, תוכל להפעיל אכיפת בדיקת אפליקציות.
מאפשר אכיפה
כדי להתחיל לאכוף את דרישות ה-App Check token בפונקציות הענן הניתנות להתקשרות, שנה את הפונקציות שלך כדי לבדוק אם קיימים אסימוני App Check חוקיים, כפי שמוצג להלן. לאחר שתפעיל אכיפה, כל הבקשות שלא אומתו יידחו.
התקן את Cloud Functions SDK.
Node.js (דור ראשון)
עדכן את התלות
firebase-functions
של הפרויקט שלך לגרסה 4.0.0 ואילך:npm install firebase-functions@">=4.0.0"
Node.js (דור שני)
עדכן את התלות
firebase-functions
של הפרויקט שלך לגרסה 4.0.0 ואילך:npm install firebase-functions@">=4.0.0"
פייתון (תצוגה מקדימה)
הוסף
firebase-functions
ל-functions/requirements.txt
:firebase-functions >= 0.1.0
לאחר מכן, עדכן את התלות בסביבה הווירטואלית של הפרויקט שלך:
./venv/bin/pip install -r requirements.txt
הפעל את אפשרות זמן הריצה של בדיקת App Check עבור הפונקציה שלך:
Node.js (דור ראשון)
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 (דור שני)
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. ... } );
פייתון (תצוגה מקדימה)
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. ...
פרוס מחדש את הפונקציות שלך:
firebase deploy --only functions
לאחר פריסת השינויים הללו, פונקציות הענן הניתנות להתקשרות ידרשו אסימוני App Check חוקיים. ערכות ה-SDK של לקוח Cloud Functions מצרף אוטומטית אסימון App Check כאשר אתה מפעיל פונקציה הניתנת להתקשרות.
הגנה על הפעלה חוזרת (בטא)
כדי להגן על פונקציה הניתנת להתקשרות מפני התקפות חוזרות, אתה יכול לצרוך את אסימון App Check לאחר אימותו. לאחר שהאסימון נצרך, לא ניתן להשתמש בו שוב.
שימו לב ששימוש בהגנה על הפעלה חוזרת מוסיף רשת הלוך ושוב לאימות אסימון, ולכן מוסיף חביון לקריאת פונקציית הענן. מסיבה זו, רוב האפליקציות מאפשרות בדרך כלל הגנת הפעלה חוזרת רק בנקודות קצה רגישות במיוחד.
כדי לצרוך אסימונים:
במסוף הענן , הענק את התפקיד "מאמת קוד בדיקת Firebase App" לחשבון השירות המשמש את פונקציית הענן.
- אם אתה מאתחל במפורש את ה-Admin SDK וציינת את האישורים של חשבון שירות Admin SDK של הפרויקט שלך, התפקיד הנדרש כבר מוענק.
- אם אתה משתמש בפונקציות ענן מהדור הראשון עם תצורת ברירת המחדל של Admin SDK, הענק את התפקיד לחשבון שירות ברירת המחדל של App Engine . ראה שינוי הרשאות חשבון שירות .
- אם אתה משתמש בפונקציות ענן מהדור השני עם תצורת ברירת המחדל של Admin SDK, הענק את התפקיד לחשבון שירות המחשוב המוגדר כברירת מחדל .
הגדר את
consumeAppCheckToken
ל-true
בהגדרת הפונקציה שלך:Node.js (דור ראשון)
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 (דור שני)
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. ... } );
עדכן את קוד לקוח האפליקציה שלך כדי לרכוש אסימונים מתכלים לשימוש מוגבל כאשר אתה קורא לפונקציה:
מָהִיר
let options = HTTPSCallableOptions(requireLimitedUseAppCheckTokens: true) let yourCallableFunction = Functions.functions().httpsCallable("yourCallableFunction", options: options) do { let result = try await yourCallableFunction.call() } catch { // ... }
API מודולרי אינטרנט
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();