Khi hiểu được ảnh hưởng của App Check đối với người dùng và đã 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ả yêu cầu chưa được xác minh sẽ bị từ chối.
Cài đặt SDK Cloud Functions.
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:npm install firebase-functions@">=4.0.0"
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:npm install firebase-functions@">=4.0.0"
Thêm
firebase-functions
vàofunctions/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 tuỳ chọn thời gian chạy thực thi App Check cho hàm của bạn:
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. ... });
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. ...
Triển khai lại các hàm:
firebase deploy --only functions
Sau khi triển khai những thay đổi này, 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ệ. SDK ứng dụng Cloud Functions 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.
Tính năng 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 Kiểm tra ứng dụng sau khi xác minh mã thông báo đó. Sau khi sử dụng, bạn không thể sử 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 lượt truy cập mạng vào quá 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 ứ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 Cloud Console, hãy cấp vai trò "Trình xác thực mã thông báo Firebase App Check" cho tài khoản dịch vụ mà hàm này sử dụng.
- Nếu bạn đang khởi chạy rõ ràng SDK quản trị 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 các Hàm trên đám mây thế hệ 1 với cấu hình SDK quản trị mặc định, hãy cấp vai trò này 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 các Hàm trên đám mây thế hệ 2 với cấu hình SDK Quản trị mặc định, hãy cấp vai trò này cho Tài khoản dịch vụ điện toán mặc định.
Đặt
consumeAppCheckToken
thànhtrue
trong phần khai báo hàm: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. ... });
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. ... } );
Cập nhật mã ứng dụng khách để lấy mã thông báo có thể sử dụng có giới hạn khi bạn gọi hàm:
let options = HTTPSCallableOptions(requireLimitedUseAppCheckTokens: true) let yourCallableFunction = Functions.functions().httpsCallable("yourCallableFunction", options: options) do { let result = try await yourCallableFunction.call() } catch { // ... }
import { getFunctions, httpsCallable } from "firebase/functions"; const yourCallableFunction = httpsCallable( getFunctions(), "yourCallableFunction", { limitedUseAppCheckTokens: true }, ); await yourCallableFunction();
val yourCallableFunction = Firebase.functions.getHttpsCallable("yourCallableFunction") { limitedUseAppCheckTokens = true } val result = yourCallableFunction.call().await()
HttpsCallableReference yourCallableFunction = FirebaseFunctions.getInstance().getHttpsCallable( "yourCallableFunction", new HttpsCallableOptions.Builder() .setLimitedUseAppCheckTokens(true) .build() ); Task<HttpsCallableResult> result = yourCallableFunction.call();