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