تفعيل فرض فحص التطبيقات لدوال Cloud

عندما تدرك كيف سيؤثر App Check في المستخدمين وتكون مستعدًا للمتابعة، يمكنك تفعيل فرض استخدام App Check للوظائف القابلة للاستدعاء.

تفعيل التنفيذ

لبدء فرض متطلبات رمز App Check في الدوال القابلة للاستدعاء، عدِّل دوالك للتحقّق من صحة رموز App Check، كما هو موضّح أدناه. بعد تفعيل خيار فرض التحقّق، سيتم رفض جميع الطلبات التي لم يتم التحقّق منها.

  1. ثبِّت حزمة تطوير البرامج (SDK) الخاصة بـ Cloud Functions.

    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"

    Python (معاينة)

    إضافة firebase-functions إلى functions/requirements.txt:

    firebase-functions >= 0.1.0
    

    بعد ذلك، عدِّل التبعيات في البيئة الافتراضية لمشروعك:

    ./venv/bin/pip install -r requirements.txt
    
  2. فعِّل خيار وقت التشغيل الخاص بفرض استخدام App Check لوظيفتك:

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

    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.
        ...
    
  3. أعِد نشر الدوال:

    firebase deploy --only functions
    

بعد نشر هذه التغييرات، ستتطلّب الدوال القابلة للاستدعاء رموز App Check صالحة. تُرفق حِزم تطوير البرامج (SDK) الخاصة بعميل Cloud Functions تلقائيًا رمزًا مميزًا App Check عند استدعاء دالة قابلة للاستدعاء.

حماية إعادة التشغيل (إصدار تجريبي)

لحماية دالة قابلة للاستدعاء من هجمات إعادة الإرسال، يمكنك استخدام رمز App Check المميّز بعد التحقّق منه. وبعد استخدامه، لا يمكن استخدامه مرة أخرى.

يُرجى العِلم أنّ استخدام ميزة "الحماية من إعادة التشغيل" يضيف رحلة ذهاب وعودة للشبكة إلى عملية التحقّق من الرمز المميّز، وبالتالي يضيف وقت استجابة إلى استدعاء الدالة. لهذا السبب، تفعّل معظم التطبيقات عادةً ميزة الحماية من إعادة الإرسال فقط على نقاط النهاية الحسّاسة بشكل خاص.

لاستخدام الرموز المميّزة، اتّبِع الخطوات التالية:

  1. في وحدة تحكّم Google Cloud، امنح حساب الخدمة المستخدَم من خلال الدالة دور "مدقّق الرمز المميّز لخدمة App Check في Firebase".

    • إذا كنت بصدد إعداد Admin SDK بشكلٍ صريح وحدّدت بيانات اعتماد حساب خدمة Admin SDK الخاص بمشروعك، سيتم منح الدور المطلوب تلقائيًا.
    • إذا كنت تستخدم الجيل الأول من Cloud Functions مع الإعداد التلقائي لحزمة SDK للمشرف، امنح الدور لحساب الخدمة التلقائي في App Engine. اطّلِع على تغيير أذونات حساب الخدمة.
    • إذا كنت تستخدم الجيل الثاني من Cloud Functions مع الإعداد التلقائي لحزمة تطوير البرامج (SDK) الخاصة بالمشرف، امنح الدور لحساب خدمة الحوسبة التلقائي.
  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. عدِّل رمز برنامج العميل لتطبيقك للحصول على رموز مميّزة للاستخدام المحدود يمكن استهلاكها عند استدعاء الدالة:

    Swift

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