เมื่อเข้าใจว่า App Check จะส่งผลต่อผู้ใช้อย่างไร และพร้อมที่จะดำเนินการต่อ คุณสามารถเปิดใช้การบังคับใช้ App Check สำหรับฟังก์ชันที่เรียกใช้ได้
การเปิดใช้การบังคับใช้
หากต้องการเริ่มบังคับใช้ข้อกำหนดเกี่ยวกับโทเค็น App Check ในฟังก์ชันที่เรียกใช้ได้ ให้แก้ไขฟังก์ชันเพื่อตรวจหาโทเค็น App Check ที่ถูกต้อง ดังที่แสดงด้านล่าง เมื่อเปิดใช้การบังคับใช้แล้ว ระบบจะปฏิเสธคำขอทั้งหมดที่ยังไม่ได้รับการยืนยัน
ติดตั้ง Cloud Functions SDK
อัปเดต Dependency ของ
firebase-functions
ของโปรเจ็กต์เป็นเวอร์ชัน 4.0.0 ขึ้นไปnpm install firebase-functions@">=4.0.0"
อัปเดต Dependency ของ
firebase-functions
ของโปรเจ็กต์เป็นเวอร์ชัน 4.0.0 ขึ้นไป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 สำหรับฟังก์ชันของคุณโดยทำดังนี้
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. ...
ทำให้ฟังก์ชันใช้งานได้อีกครั้งโดยทำดังนี้
firebase deploy --only functions
เมื่อทําการเปลี่ยนแปลงเหล่านี้แล้ว ฟังก์ชันที่เรียกใช้ได้จะต้องมีโทเค็น App Check ที่ถูกต้อง SDK ไคลเอ็นต์ Cloud Functions จะแนบโทเค็น App Check โดยอัตโนมัติเมื่อคุณเรียกใช้ฟังก์ชันที่เรียกใช้ได้
การป้องกันการเล่นซ้ำ (เบต้า)
หากต้องการปกป้องฟังก์ชันที่เรียกใช้ได้จากการโจมตีด้วยการเล่นซ้ำ คุณสามารถใช้โทเค็น App Checked หลังจากยืนยันแล้ว เมื่อใช้โทเค็นแล้ว คุณจะไม่สามารถใช้งานโทเค็นนั้นได้อีก
โปรดทราบว่าการใช้การป้องกันการเล่นซ้ำจะเพิ่มการติดต่อเครือข่ายแบบไปกลับเพื่อยืนยันโทเค็น และทำให้การเรียกฟังก์ชันมีความล่าช้า ด้วยเหตุนี้ แอปส่วนใหญ่จึงมักเปิดใช้การป้องกันการเล่นซ้ำเฉพาะกับปลายทางที่มีความละเอียดอ่อนเป็นพิเศษเท่านั้น
วิธีใช้โทเค็น
ในคอนโซล Cloud ให้มอบหมายบทบาท "ผู้ตรวจสอบโทเค็น Firebase App Check" ให้กับบัญชีบริการที่ใช้โดยฟังก์ชัน
- หากคุณเริ่มต้น Admin SDK อย่างชัดแจ้งและระบุข้อมูลเข้าสู่ระบบของบัญชีบริการ Admin SDK ของโปรเจ็กต์ ระบบจะมอบบทบาทที่จําเป็นให้แล้ว
- หากคุณใช้ Cloud Functions รุ่นที่ 1 ที่มีการกำหนดค่า Admin SDK เริ่มต้น ให้มอบหมายบทบาทให้กับบัญชีบริการเริ่มต้นของ App Engine โปรดดูหัวข้อการเปลี่ยนสิทธิ์ของบัญชีบริการ
- หากคุณใช้ Cloud Functions รุ่นที่ 2 ที่มีการกำหนดค่า Admin SDK เริ่มต้น ให้มอบบทบาทให้กับบัญชีบริการประมวลผลเริ่มต้น
ตั้งค่า
consumeAppCheckToken
เป็นtrue
ในคําจํากัดความฟังก์ชัน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. ... } );
อัปเดตโค้ดไคลเอ็นต์แอปเพื่อรับโทเค็นแบบจำกัดการใช้งานที่บริโภคได้เมื่อคุณเรียกใช้ฟังก์ชันต่อไปนี้
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();