اجرای بررسی برنامه را برای عملکردهای ابری فعال کنید

وقتی فهمیدید که App Check چگونه بر کاربران شما تأثیر می‌گذارد و آماده ادامه کار شدید، می‌توانید App Check enforcement را برای توابع قابل فراخوانی فعال کنید.

فعال کردن اجرای قانون

برای شروع اجرای الزامات توکن App Check در توابع قابل فراخوانی خود، توابع خود را برای بررسی توکن‌های معتبر App Check ، مطابق شکل زیر، اصلاح کنید. پس از فعال کردن اجرا، تمام درخواست‌های تأیید نشده رد خواهند شد.

  1. SDK Cloud Functions را نصب کنید.

    Node.js (نسل دوم)

    وابستگی firebase-functions پروژه خود را به نسخه ۴.۰.۰ یا جدیدتر به‌روزرسانی کنید:

    npm install firebase-functions@">=4.0.0"

    Node.js (نسل اول)

    وابستگی firebase-functions پروژه خود را به نسخه ۴.۰.۰ یا جدیدتر به‌روزرسانی کنید:

    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 enforcement runtime را برای تابع خود فعال کنید:

    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.
        ...
      }
    );
    

    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.
            ...
      });
    

    پایتون (پیش‌نمایش)

    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. در کنسول Google Cloud ، نقش "Firebase App Check Token Verifier" را به حساب سرویس مورد استفاده توسط تابع اعطا کنید.

    • اگر صریحاً در حال مقداردهی اولیه SDK مدیریت هستید و اعتبارنامه‌های حساب کاربری سرویس SDK مدیریت پروژه خود را مشخص کرده‌اید، نقش مورد نیاز از قبل اعطا شده است.
    • اگر از توابع ابری نسل اول با پیکربندی پیش‌فرض Admin SDK استفاده می‌کنید، این نقش را به حساب سرویس پیش‌فرض App Engine اعطا کنید. به بخش تغییر مجوزهای حساب سرویس مراجعه کنید.
    • اگر از توابع ابری نسل دوم با پیکربندی پیش‌فرض Admin SDK استفاده می‌کنید، این نقش را به حساب کاربری Default computing service اعطا کنید.
  2. در تعریف تابع خود، consumeAppCheckToken را برابر با true قرار دهید:

    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.
        ...
      }
    );
    

    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.
          ...
      });
    
  3. کد کلاینت برنامه خود را به‌روزرسانی کنید تا هنگام فراخوانی تابع، توکن‌های مصرفی با کاربرد محدود را دریافت کند:

    سویفت

    let options = HTTPSCallableOptions(requireLimitedUseAppCheckTokens: true)
    let yourCallableFunction =
        Functions.functions().httpsCallable("yourCallableFunction", options: options)
    do {
        let result = try await yourCallableFunction.call()
    } catch {
        // ...
    }
    

    Kotlin

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

    Web

    import { getFunctions, httpsCallable } from "firebase/functions";
    
    const yourCallableFunction = httpsCallable(
      getFunctions(),
      "yourCallableFunction",
      { limitedUseAppCheckTokens: true },
    );
    await yourCallableFunction();