Để bắt đầu thực thi các yêu cầu về mã thông báo App Check trong các hàm có thể gọi, hãy sửa đổi các hàm để kiểm tra mã thông báo App Check hợp lệ, như minh hoạ bên dưới. Sau khi bạn bật chế độ thực thi, tất cả các yêu cầu chưa được xác minh sẽ bị từ chối.
Cài đặt SDK Cloud Functions.
Node.js (thế hệ thứ 2)
Cập nhật phần phụ thuộc firebase-functions của dự án lên phiên bản 4.0.0 trở lên:
npminstallfirebase-functions@">=4.0.0"
Node.js (thế hệ thứ 1)
Cập nhật phần phụ thuộc firebase-functions của dự án lên phiên bản 4.0.0 trở lên:
npminstallfirebase-functions@">=4.0.0"
Python (bản xem trước)
Thêm firebase-functions vào functions/requirements.txt:
firebase-functions >= 0.1.0
Sau đó, hãy cập nhật các phần phụ thuộc trong môi trường ảo của dự án:
./venv/bin/pip install -r requirements.txt
Bật lựa chọn thời gian chạy thực thi App Check cho hàm của bạn:
Node.js (thế hệ thứ 2)
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 (thế hệ thứ 1)
constfunctions=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 (bản xem trước)
fromfirebase_functionsimporthttps_fn@https_fn.on_call(enforce_app_check=True# Reject requests with missing or invalid App Check tokens.)defyour_callable_function(req:https_fn.CallableRequest)-> https_fn.Response:# req.app contains data from App Check, including the app ID.# Your function logic follows....
Triển khai lại các hàm:
firebase deploy --only functions
Sau khi những thay đổi này được triển khai, các hàm có thể gọi của bạn sẽ yêu cầu mã thông báo App Check hợp lệ. Các SDK Cloud Functions cho ứng dụng sẽ tự động đính kèm mã thông báo App Check khi bạn gọi một hàm có thể gọi.
Bảo vệ khỏi các cuộc tấn công phát lại (thử nghiệm)
Để bảo vệ một hàm có thể gọi khỏi các cuộc tấn công phát lại, bạn có thể sử dụng mã thông báo App Check sau khi xác minh mã thông báo đó. Sau khi được sử dụng, bạn không thể dùng lại mã thông báo.
Xin lưu ý rằng việc sử dụng tính năng chống phát lại sẽ thêm một chuyến khứ hồi mạng vào quy trình xác minh mã thông báo, do đó làm tăng độ trễ cho lệnh gọi hàm. Vì lý do này, hầu hết các ứng dụng thường chỉ bật tính năng bảo vệ chống phát lại trên các điểm cuối nhạy cảm cụ thể.
Cách sử dụng mã thông báo:
Trong bảng điều khiển Google Cloud, hãy cấp vai trò "Trình xác minh mã thông báo App Check của Firebase" cho tài khoản dịch vụ mà hàm sử dụng.
Nếu bạn đang khởi động rõ ràng Admin SDK và đã chỉ định thông tin đăng nhập tài khoản dịch vụ Admin SDK của dự án, thì vai trò bắt buộc đã được cấp.
Nếu bạn đang sử dụng Cloud Functions thế hệ thứ nhất với cấu hình Admin SDK mặc định, hãy cấp vai trò cho tài khoản dịch vụ mặc định của App Engine. Xem phần Thay đổi quyền của tài khoản dịch vụ.
Nếu bạn đang sử dụng Cloud Functions thế hệ thứ 2 với cấu hình Admin SDK mặc định, hãy cấp vai trò cho Tài khoản dịch vụ điện toán mặc định.
Đặt consumeAppCheckToken thành true trong định nghĩa hàm:
Node.js (thế hệ thứ 2)
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 (thế hệ thứ 1)
constfunctions=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....});
Cập nhật mã ứng dụng để nhận mã thông báo sử dụng một lần có thể sử dụng khi bạn gọi hàm:
[[["Dễ hiểu","easyToUnderstand","thumb-up"],["Giúp tôi giải quyết được vấn đề","solvedMyProblem","thumb-up"],["Khác","otherUp","thumb-up"]],[["Thiếu thông tin tôi cần","missingTheInformationINeed","thumb-down"],["Quá phức tạp/quá nhiều bước","tooComplicatedTooManySteps","thumb-down"],["Đã lỗi thời","outOfDate","thumb-down"],["Vấn đề về bản dịch","translationIssue","thumb-down"],["Vấn đề về mẫu/mã","samplesCodeIssue","thumb-down"],["Khác","otherDown","thumb-down"]],["Cập nhật lần gần đây nhất: 2025-08-23 UTC."],[],[],null,["When you [understand how App Check will affect your users](/docs/app-check/monitor-functions-metrics)\nand you're ready to proceed, you can enable App Check enforcement for\n[callable functions](/docs/functions/callable).\n\nEnable enforcement\n\nTo begin enforcing App Check token requirements in your callable\nfunctions, modify your functions to check for valid App Check\ntokens, as shown below. Once you enable enforcement, all unverified requests\nwill be rejected.\n\n1. Install the Cloud Functions SDK.\n\n Node.js (2nd gen)\n\n Update your project's `firebase-functions` dependency to version 4.0.0 or\n newer: \n\n npm install firebase-functions@\"\u003e=4.0.0\"\n\n Node.js (1st gen)\n\n Update your project's `firebase-functions` dependency to version 4.0.0 or\n newer: \n\n npm install firebase-functions@\"\u003e=4.0.0\"\n\n Python (preview)\n\n Add `firebase-functions` to `functions/requirements.txt`: \n\n firebase-functions \u003e= 0.1.0\n\n Then, update the dependencies in your project's virtual environment: \n\n ./venv/bin/pip install -r requirements.txt\n\n2. Enable the App Check enforcement runtime option for your function:\n\n Node.js (2nd gen) \n\n const { onCall } = require(\"firebase-functions/v2/https\");\n\n exports.yourV2CallableFunction = onCall(\n {\n enforceAppCheck: true, // Reject requests with missing or invalid App Check tokens.\n },\n (request) =\u003e {\n // request.app contains data from App Check, including the app ID.\n // Your function logic follows.\n ...\n }\n );\n\n Node.js (1st gen) \n\n const functions = require(\"firebase-functions/v1\");\n\n exports.yourV1CallableFunction = functions\n .runWith({\n enforceAppCheck: true, // Reject requests with missing or invalid App Check tokens.\n })\n .https.onCall((data, context) =\u003e {\n // context.app contains data from App Check, including the app ID.\n // Your function logic follows.\n ...\n });\n\n Python (preview) \n\n from firebase_functions import https_fn\n\n @https_fn.on_call(\n enforce_app_check=True # Reject requests with missing or invalid App Check tokens.\n )\n def your_callable_function(req: https_fn.CallableRequest) -\u003e https_fn.Response:\n # req.app contains data from App Check, including the app ID.\n # Your function logic follows.\n ...\n\n3. Redeploy your functions:\n\n ```\n firebase deploy --only functions\n ```\n\nOnce these changes are deployed, your callable functions will require\nvalid App Check tokens. The Cloud Functions client SDKs automatically\nattach an App Check token when you invoke a callable function.\n\nReplay protection (beta)\n\nTo protect a callable function from replay attacks, you can consume the App\nCheck token after verifying it. Once the token is consumed, it cannot be used\nagain.\n| **Note:** The replay protection beta supports only the Cloud Functions SDK for Node.js.\n\nNote that using replay protection adds a network round trip to token\nverification, and therefore adds latency to the function call. For this\nreason, most apps typically enable replay protection only on particularly\nsensitive endpoints.\n\nTo consume tokens:\n\n1. In the\n [Google Cloud console](https://console.cloud.google.com/iam-admin/iam?project=_),\n grant the \"Firebase App Check Token Verifier\" role to the service account\n used by the function.\n\n - If you're explicitly initializing the Admin SDK and you specified your project's Admin SDK service account credentials, the required role is already granted.\n - If you're using 1st generation Cloud Functions with the default Admin SDK configuration, grant the role to the **App Engine default service\n account** . See [Changing service account permissions](https://cloud.google.com/appengine/docs/legacy/standard/python/service-account#modifying_the_default_service_account).\n - If you're using 2nd generation Cloud Functions with the default Admin SDK configuration, grant the role to the **Default compute service\n account**.\n2. Set `consumeAppCheckToken` to `true` in your function definition:\n\n Node.js (2nd gen) \n\n const { onCall } = require(\"firebase-functions/v2/https\");\n\n exports.yourV2CallableFunction = onCall(\n {\n enforceAppCheck: true, // Reject requests with missing or invalid App Check tokens.\n consumeAppCheckToken: true // Consume the token after verification.\n },\n (request) =\u003e {\n // request.app contains data from App Check, including the app ID.\n // Your function logic follows.\n ...\n }\n );\n\n Node.js (1st gen) \n\n const functions = require(\"firebase-functions/v1\");\n\n exports.yourV1CallableFunction = functions\n .runWith({\n enforceAppCheck: true, // Reject requests with missing or invalid App Check tokens.\n consumeAppCheckToken: true // Consume the token after verification.\n })\n .https.onCall((data, context) =\u003e {\n // context.app contains data from App Check, including the app ID.\n // Your function logic follows.\n ...\n });\n\n3. Update your app client code to acquire consumable limited-use tokens when\n you call the function:\n\n Swift \n\n let options = HTTPSCallableOptions(requireLimitedUseAppCheckTokens: true)\n let yourCallableFunction =\n Functions.functions().httpsCallable(\"yourCallableFunction\", options: options)\n do {\n let result = try await yourCallableFunction.call()\n } catch {\n // ...\n }\n\n Kotlin \n\n val yourCallableFunction = Firebase.functions.getHttpsCallable(\"yourCallableFunction\") {\n limitedUseAppCheckTokens = true\n }\n val result = yourCallableFunction.call().await()\n\n Java \n\n HttpsCallableReference yourCallableFunction = FirebaseFunctions.getInstance().getHttpsCallable(\n \"yourCallableFunction\",\n new HttpsCallableOptions.Builder()\n .setLimitedUseAppCheckTokens(true)\n .build()\n );\n Task\u003cHttpsCallableResult\u003e result = yourCallableFunction.call();\n\n Web \n\n import { getFunctions, httpsCallable } from \"firebase/functions\";\n\n const yourCallableFunction = httpsCallable(\n getFunctions(),\n \"yourCallableFunction\",\n { limitedUseAppCheckTokens: true },\n );\n await yourCallableFunction();"]]