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 phép thực thi
Để bắt đầu thực thi các yêu cầu về mã thông báo App Check trong Cloud Functions có thể gọi, hãy sửa đổi các hàm của bạn để kiểm tra mã thông báo App Check hợp lệ, như minh hoạ dưới đây. 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.
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 hoặc mới hơn:npm install firebase-functions@">=4.0.0"
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:npm install firebase-functions@">=4.0.0"
Python (bản xem trước)
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 tính năng Kiểm tra ứng dụng cho hàm của bạn:
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. ... });
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. ... } );
Python (bản 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 chức năng:
firebase deploy --only functions
Sau khi triển khai các thay đổi này, Cloud Functions có thể gọi 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.
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 mã thông báo được tiêu thụ, bạn không thể sử dụng nó một lần nữa.
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 trên đám mây. 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 Cloud, cấp "Trình xác minh mã thông báo của tính năng Kiểm tra ứng dụng Firebase" vai trò đối với tài khoản dịch vụ mà Chức năng đám mâ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 Cloud Functions thế hệ 1 với quyền mặc định là Admin (Quản trị viên) Cấu hình SDK, cấp vai trò cho dịch vụ mặc định của App Engine tài khoản. 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: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. ... });
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. ... } );
Cập nhật mã ứng dụng khách của ứng dụng để mua sản phẩm tiêu dùng có giới hạn sử dụng khi bạn gọi hàm này:
Swift
let options = HTTPSCallableOptions(requireLimitedUseAppCheckTokens: true) let yourCallableFunction = Functions.functions().httpsCallable("yourCallableFunction", options: options) do { let result = try await yourCallableFunction.call() } catch { // ... }
Web
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();