تمكين فرض التحقق من التطبيق لوظائف السحابة

عندما تفهم كيف سيؤثر التحقق من التطبيق على المستخدمين لديك وتكون جاهزًا للمتابعة، يمكنك تمكين فرض التحقق من التطبيق.

تمكين التنفيذ

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

  1. قم بتثبيت SDK للوظائف السحابية.

    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"
    

    بايثون (معاينة)

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

    بايثون (معاينة)

    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. في وحدة التحكم السحابية ، امنح دور "Firebase App Check Token Verifier" لحساب الخدمة الذي تستخدمه وظيفة السحابة.

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

    سويفت

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

    واجهة برمجة تطبيقات الويب المعيارية

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