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

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

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

لبدء فرض متطلبات رمز App Check في الدالة القابلة للاتّصال Cloud Functions، عدِّل وظائفك للتحقّق من رموز App Check صالحة، كما هو موضّح أدناه. بعد تفعيل ميزة التنفيذ، سيتم رفض جميع الطلبات التي لم يتم إثبات ملكيتها.

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

    ‫Node.js (الجيل الأول)

    تعديل اعتمادية مشروعك على firebase-functions إلى الإصدار 4.0.0 أو :newer

    npm install firebase-functions@">=4.0.0"

    ‫Node.js (الجيل الثاني)

    تعديل اعتمادية مشروعك على firebase-functions إلى الإصدار 4.0.0 أو :newer

    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

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