وقتی فهمیدید که App Check چگونه بر کاربران شما تأثیر میگذارد و آماده ادامه کار شدید، میتوانید App Check enforcement را برای توابع قابل فراخوانی فعال کنید.
فعال کردن اجرای قانون
برای شروع اجرای الزامات توکن App Check در توابع قابل فراخوانی خود، توابع خود را برای بررسی توکنهای معتبر App Check ، مطابق شکل زیر، اصلاح کنید. پس از فعال کردن اجرا، تمام درخواستهای تأیید نشده رد خواهند شد.
SDK Cloud Functions را نصب کنید.
Node.js (نسل دوم)
وابستگی
firebase-functionsپروژه خود را به نسخه ۴.۰.۰ یا جدیدتر بهروزرسانی کنید:npm install firebase-functions@">=4.0.0"Node.js (نسل اول)
وابستگی
firebase-functionsپروژه خود را به نسخه ۴.۰.۰ یا جدیدتر بهروزرسانی کنید: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 enforcement runtime را برای تابع خود فعال کنید:
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. ... } );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. ... });پایتون (پیشنمایش)
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 را مصرف کنید. پس از مصرف توکن، دیگر نمیتوان از آن استفاده کرد.
توجه داشته باشید که استفاده از محافظت در برابر بازپخش، یک رفت و برگشت شبکهای به تأیید توکن اضافه میکند و بنابراین تأخیر در فراخوانی تابع را افزایش میدهد. به همین دلیل، اکثر برنامهها معمولاً محافظت در برابر بازپخش را فقط در نقاط پایانی بسیار حساس فعال میکنند.
برای مصرف توکنها:
در کنسول Google Cloud ، نقش "Firebase App Check Token Verifier" را به حساب سرویس مورد استفاده توسط تابع اعطا کنید.
- اگر صریحاً در حال مقداردهی اولیه SDK مدیریت هستید و اعتبارنامههای حساب کاربری سرویس SDK مدیریت پروژه خود را مشخص کردهاید، نقش مورد نیاز از قبل اعطا شده است.
- اگر از توابع ابری نسل اول با پیکربندی پیشفرض Admin SDK استفاده میکنید، این نقش را به حساب سرویس پیشفرض App Engine اعطا کنید. به بخش تغییر مجوزهای حساب سرویس مراجعه کنید.
- اگر از توابع ابری نسل دوم با پیکربندی پیشفرض Admin SDK استفاده میکنید، این نقش را به حساب کاربری Default computing service اعطا کنید.
در تعریف تابع خود،
consumeAppCheckTokenرا برابر باtrueقرار دهید: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. ... } );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. ... });کد کلاینت برنامه خود را بهروزرسانی کنید تا هنگام فراخوانی تابع، توکنهای مصرفی با کاربرد محدود را دریافت کند:
سویفت
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();