เมื่อคุณ เข้าใจว่า App Check จะส่งผลต่อผู้ใช้อย่างไร และพร้อมที่จะดำเนินการต่อ คุณจะเปิดใช้การบังคับใช้ App Check ได้
การเปิดใช้งานการบังคับใช้
หากต้องการเริ่มบังคับใช้ข้อกำหนดโทเค็น App Check ในฟังก์ชันคลาวด์ที่เรียกใช้ได้ ให้แก้ไขฟังก์ชันของคุณเพื่อตรวจสอบโทเค็น App Check ที่ถูกต้องดังที่แสดงด้านล่าง เมื่อคุณเปิดใช้งานการบังคับใช้ คำขอที่ไม่ได้รับการยืนยันทั้งหมดจะถูกปฏิเสธ
ติดตั้ง Cloud Functions SDK
Node.js (รุ่นที่ 1)
อัปเดตการพึ่งพา
firebase-functions
ของโปรเจ็กต์เป็นเวอร์ชัน 4.0.0 หรือใหม่กว่า:npm install firebase-functions@">=4.0.0"
Node.js (รุ่นที่ 2)
อัปเดตการพึ่งพา
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
เปิดใช้ตัวเลือกรันไทม์บังคับใช้การตรวจสอบแอปสำหรับฟังก์ชันของคุณ:
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. ... } );
หลาม (ตัวอย่าง)
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 Check ได้หลังจากยืนยันแล้ว เมื่อโทเค็นถูกใช้ไปแล้ว จะไม่สามารถใช้ได้อีก
โปรดทราบว่าการใช้การป้องกันการเล่นซ้ำจะเพิ่มการเดินทางไปกลับของเครือข่ายในการตรวจสอบโทเค็น ดังนั้นจึงเพิ่มเวลาแฝงให้กับการเรียกใช้ฟังก์ชันคลาวด์ ด้วยเหตุนี้ แอปส่วนใหญ่จึงเปิดใช้งานการป้องกันการเล่นซ้ำเฉพาะบนปลายทางที่มีความละเอียดอ่อนเป็นพิเศษเท่านั้น
วิธีใช้โทเค็น:
ใน Cloud console ให้มอบบทบาท "Firebase App Check Token Verifier" ให้กับบัญชีบริการที่ใช้โดย 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. ... } );
อัปเดตโค้ดไคลเอ็นต์ของแอปเพื่อรับโทเค็นการใช้งานแบบจำกัดที่สิ้นเปลืองเมื่อคุณเรียกใช้ฟังก์ชัน:
สวิฟท์
let options = HTTPSCallableOptions(requireLimitedUseAppCheckTokens: true) let yourCallableFunction = Functions.functions().httpsCallable("yourCallableFunction", options: options) do { let result = try await yourCallableFunction.call() } catch { // ... }
API แบบโมดูลาร์ของเว็บ
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();