אפשר אכיפת בדיקת אפליקציות עבור פונקציות ענן

כשתבין כיצד בדיקת אפליקציות תשפיע על המשתמשים שלך ואתה מוכן להמשיך, תוכל להפעיל אכיפת בדיקת אפליקציות.

מאפשר אכיפה

כדי להתחיל לאכוף את דרישות ה-App Check token בפונקציות הענן הניתנות להתקשרות, שנה את הפונקציות שלך כדי לבדוק אם קיימים אסימוני App Check חוקיים, כפי שמוצג להלן. לאחר שתפעיל אכיפה, כל הבקשות שלא אומתו יידחו.

  1. התקן את Cloud Functions SDK.

    Node.js (דור ראשון)

    עדכן את התלות firebase-functions של הפרויקט שלך לגרסה 4.0.0 ואילך:

    npm install firebase-functions@">=4.0.0"
    

    Node.js (דור שני)

    עדכן את התלות 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. הפעל את אפשרות זמן הריצה של בדיקת App Check עבור הפונקציה שלך:

    Node.js (דור ראשון)

    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 (דור שני)

    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. במסוף הענן , הענק את התפקיד "מאמת קוד בדיקת Firebase App" לחשבון השירות המשמש את פונקציית הענן.

    • אם אתה מאתחל במפורש את ה-Admin SDK וציינת את האישורים של חשבון שירות Admin SDK של הפרויקט שלך, התפקיד הנדרש כבר מוענק.
    • אם אתה משתמש בפונקציות ענן מהדור הראשון עם תצורת ברירת המחדל של Admin SDK, הענק את התפקיד לחשבון שירות ברירת המחדל של App Engine . ראה שינוי הרשאות חשבון שירות .
    • אם אתה משתמש בפונקציות ענן מהדור השני עם תצורת ברירת המחדל של Admin SDK, הענק את התפקיד לחשבון שירות המחשוב המוגדר כברירת מחדל .
  2. הגדר את consumeAppCheckToken ל- true בהגדרת הפונקציה שלך:

    Node.js (דור ראשון)

    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 (דור שני)

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