เปิดใช้การบังคับใช้การตรวจสอบแอปสำหรับฟังก์ชันระบบคลาวด์

เมื่อคุณ เข้าใจว่า App Check จะส่งผลต่อผู้ใช้อย่างไร และพร้อมที่จะดำเนินการต่อ คุณจะเปิดใช้การบังคับใช้ App Check ได้

การเปิดใช้งานการบังคับใช้

หากต้องการเริ่มบังคับใช้ข้อกำหนดโทเค็น App Check ในฟังก์ชันคลาวด์ที่เรียกใช้ได้ ให้แก้ไขฟังก์ชันของคุณเพื่อตรวจสอบโทเค็น App Check ที่ถูกต้องดังที่แสดงด้านล่าง เมื่อคุณเปิดใช้งานการบังคับใช้ คำขอที่ไม่ได้รับการยืนยันทั้งหมดจะถูกปฏิเสธ

  1. ติดตั้ง 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
    
  2. เปิดใช้ตัวเลือกรันไทม์บังคับใช้การตรวจสอบแอปสำหรับฟังก์ชันของคุณ:

    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.
        ...
    
  3. ปรับใช้ฟังก์ชันของคุณใหม่:

    firebase deploy --only functions
    

เมื่อปรับใช้การเปลี่ยนแปลงเหล่านี้แล้ว ฟังก์ชันคลาวด์ที่เรียกได้ของคุณจะต้องใช้โทเค็น App Check ที่ถูกต้อง SDK ไคลเอ็นต์ Cloud Functions จะแนบโทเค็น App Check โดยอัตโนมัติเมื่อคุณเรียกใช้ฟังก์ชันที่เรียกใช้ได้

การป้องกันการเล่นซ้ำ (เบต้า)

เพื่อปกป้องฟังก์ชันที่เรียกใช้ได้จากการโจมตีแบบเล่นซ้ำ คุณสามารถใช้โทเค็น App Check ได้หลังจากยืนยันแล้ว เมื่อโทเค็นถูกใช้ไปแล้ว จะไม่สามารถใช้ได้อีก

โปรดทราบว่าการใช้การป้องกันการเล่นซ้ำจะเพิ่มการเดินทางไปกลับของเครือข่ายในการตรวจสอบโทเค็น ดังนั้นจึงเพิ่มเวลาแฝงให้กับการเรียกใช้ฟังก์ชันคลาวด์ ด้วยเหตุนี้ แอปส่วนใหญ่จึงเปิดใช้งานการป้องกันการเล่นซ้ำเฉพาะบนปลายทางที่มีความละเอียดอ่อนเป็นพิเศษเท่านั้น

วิธีใช้โทเค็น:

  1. ใน 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 เริ่มต้น ให้มอบบทบาทให้กับ บัญชีบริการประมวลผลเริ่มต้น
  2. ตั้งค่า 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.
        ...
      }
    );
    
  3. อัปเดตโค้ดไคลเอ็นต์ของแอปเพื่อรับโทเค็นการใช้งานแบบจำกัดที่สิ้นเปลืองเมื่อคุณเรียกใช้ฟังก์ชัน:

    สวิฟท์

    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();