Khi hiểu rõ cách App Check sẽ ảnh hưởng đến người dùng và bạn đã sẵn sàng tiếp tục, bạn có thể bật tính năng thực thi App Check cho các hàm có thể gọi.
Bật tính năng thực thi
Để 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 tính năng 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-functionscủa dự án lên phiên bản 4.0.0 trở lên:npm install firebase-functions@">=4.0.0"Node.js (thế hệ thứ 1)
Cập nhật phần phụ thuộc
firebase-functionscủa dự án lên phiên bản 4.0.0 trở lên:npm install firebase-functions@">=4.0.0"Python (xem trước)
Thêm
firebase-functionsvàofunctions/requirements.txt:firebase-functions >= 0.1.0Sau đó, 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.txtBật tuỳ chọn thời gian chạy thực thi Kiểm tra ứng dụng cho 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. }, (request) => { // request.app contains data from App Check, including the app ID. // Your function logic follows. ... } );Node.js (thế hệ thứ 1)
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. ... });Python (xem trước)
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. ...Triển khai lại các hàm:
firebase deploy --only functions
Sau khi triển khai các thay đổi này, các hàm có thể gọi sẽ yêu cầu mã thông báo App Check hợp lệ. SDK máy khách Cloud Functions 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.
Chố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 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 trên mạng vào quy trình xác minh mã thông báo, do đó, sẽ 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 chống phát lại trên các điểm cuối đặc biệt nhạy cảm.
Cách sử dụng mã thông báo:
Trong bảng điều khiển, hãy cấp vai trò "Trình xác minh mã thông báo Kiểm tra ứng dụng Firebase" cho tài khoản dịch vụ mà hàm sử dụng.Google Cloud
- Nếu bạn đang khởi chạy SDK quản trị một cách rõ ràng và đã chỉ định thông tin xác thực tài khoản dịch vụ SDK quản trị 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 SDK dành cho quản trị viên 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 bài viết 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ứ hai với cấu hình SDK dành cho quản trị viên mặc định, hãy cấp vai trò cho Tài khoản dịch vụ tính toán mặc định.
Đặt
consumeAppCheckTokenthànhtruetrong đị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)
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. ... });Cập nhật mã máy khách ứng dụng để thu thập mã thông báo sử dụng có giới hạn có thể sử dụng khi bạn gọi hàm:
Swift
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();