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

بعد فهم مدى تأثير App Check في المستخدمين واستعدادك للمتابعة، يمكنك تفعيل فرض App Check.

تفعيل إجراءات التنفيذ

لبدء فرض متطلبات رمز App Check في الدالة القابلة للاتّصال Cloud Functions، عدِّل وظائفك للتحقّق من رموز 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. فعِّل خيار وقت التشغيل لفرض فحص التطبيق لوظيفتك:

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

    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
    

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

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

لحماية دالة قابلة للاستدعاء من هجمات إعادة التشغيل، يمكنك استخدام الرمز المميّز App Check بعد إثبات صحته. بعد استخدام الرمز المميّز، لا يمكن استخدامه مجددًا.

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

لاستخدام الرموز المميّزة:

  1. في Cloud Console، منح دور "مُدقّق رمز أمان Firebase App Check" لحساب الخدمة الذي تستخدمه Cloud Function

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

    Swift

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

    Web

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