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

عند فهم مدى تأثير ميزة "فحص التطبيق" على المستخدمين وبذلك تكون مستعدًا للمتابعة، يمكنك تفعيل فرض ميزة "التحقّق من التطبيقات".

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

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

  1. ثبِّت حزمة تطوير برامج 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
    

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

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

لحماية وظيفة قابلة للاستدعاء من هجمات إعادة التشغيل، يمكنك استهلاك التطبيق تحقَّق من الرمز المميّز بعد إثبات ملكيته. بعد استهلاك الرمز المميّز، لا يمكن استخدامه. مرة أخرى.

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

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

  1. في جلسة المعمل، Cloud Console، منح "أداة إثبات ملكية الرمز المميّز لفحص تطبيقات Firebase" الدور في حساب الخدمة التي تستخدمها دالة السحابة.

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