Cloud Functions के लिए, ऐप्लिकेशन की जांच के लिए नीति उल्लंघन ठीक करने का तरीका (एनफ़ोर्समेंट) चालू करें

जब आपको यह समझ आ जाए कि App Check से आपके उपयोगकर्ताओं पर क्या असर पड़ेगा और आप आगे बढ़ने के लिए तैयार हों, तो कॉल किए जा सकने वाले फ़ंक्शन के लिए, App Check लागू करने की सुविधा चालू की जा सकती है.

नीति उल्लंघन ठीक करने के तरीके (एनफ़ोर्समेंट) की सुविधा चालू करना

कॉल किए जा सकने वाले फ़ंक्शन में App Check टोकन की ज़रूरी शर्तों को लागू करने के लिए, अपने फ़ंक्शन में बदलाव करें. इससे, मान्य App Check टोकन की जांच की जा सकेगी. इसके लिए, यहां दिया गया तरीका अपनाएं. नीति उल्लंघन ठीक करने की सुविधा चालू करने के बाद, पुष्टि न किए गए सभी अनुरोधों को अस्वीकार कर दिया जाएगा.

  1. Cloud Functions SDK टूल इंस्टॉल करें.

    अपने प्रोजेक्ट की firebase-functions डिपेंडेंसी को 4.0.0 या इसके बाद के वर्शन पर अपडेट करें:

    npm install firebase-functions@">=4.0.0"

    अपने प्रोजेक्ट की firebase-functions डिपेंडेंसी को 4.0.0 या इसके बाद के वर्शन पर अपडेट करें:

    npm install firebase-functions@">=4.0.0"

    functions/requirements.txt में firebase-functions जोड़ें:

    firebase-functions >= 0.1.0
    

    इसके बाद, अपने प्रोजेक्ट के वर्चुअल एनवायरमेंट में डिपेंडेंसी अपडेट करें:

    ./venv/bin/pip install -r requirements.txt
    
  2. अपने फ़ंक्शन के लिए, रनटाइम के दौरान ऐप्लिकेशन की जांच करने की सुविधा चालू करें:

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

ये बदलाव लागू होने के बाद, आपके कॉल किए जा सकने वाले फ़ंक्शन के लिए, मान्य App Check टोकन की ज़रूरत होगी. कॉल किए जा सकने वाले फ़ंक्शन को कॉल करने पर, Cloud Functions क्लाइंट SDK टूल अपने-आप एक App Check टोकन अटैच कर देते हैं.

रीप्ले की सुरक्षा (बीटा वर्शन)

किसी कॉल किए जा सकने वाले फ़ंक्शन को रीप्ले अटैक से बचाने के लिए, पुष्टि करने के बाद App Check टोकन का इस्तेमाल किया जा सकता है. टोकन का इस्तेमाल करने के बाद, उसे फिर से इस्तेमाल नहीं किया जा सकता.

ध्यान दें कि फिर से चलाए जाने से रोकने की सुविधा का इस्तेमाल करने पर, टोकन की पुष्टि करने के लिए नेटवर्क का एक राउंड ट्रिप जुड़ जाता है. इसलिए, फ़ंक्शन कॉल में देरी हो जाती है. इस वजह से, ज़्यादातर ऐप्लिकेशन आम तौर पर सिर्फ़ संवेदनशील एंडपॉइंट पर, रिप्ले प्रोटेक्शन की सुविधा चालू करते हैं.

टोकन इस्तेमाल करने के लिए:

  1. Cloud Console में, फ़ंक्शन के इस्तेमाल किए गए सेवा खाते को "Firebase ऐप्लिकेशन की जांच करने वाला टोकन पुष्टि करने वाला" की भूमिका दें.

    • अगर एडमिन SDK टूल को साफ़ तौर पर शुरू किया जा रहा है और आपने अपने प्रोजेक्ट के एडमिन SDK टूल के सेवा खाते के क्रेडेंशियल दिए हैं, तो ज़रूरी भूमिका पहले ही दी जा चुकी है.
    • अगर डिफ़ॉल्ट एडमिन एसडीके कॉन्फ़िगरेशन के साथ, पहले जनरेशन के Cloud Functions का इस्तेमाल किया जा रहा है, तो App Engine के डिफ़ॉल्ट सेवा खाते को भूमिका दें. सेवा खाते की अनुमतियां बदलना लेख पढ़ें.
    • अगर डिफ़ॉल्ट Admin SDK कॉन्फ़िगरेशन के साथ, दूसरे जनरेशन के Cloud Functions का इस्तेमाल किया जा रहा है, तो डिफ़ॉल्ट कंप्यूट सेवा खाते को भूमिका दें.
  2. फ़ंक्शन की परिभाषा में consumeAppCheckToken को true पर सेट करें:

    Node.js (1st gen)Node.js (2nd gen)
    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.
          ...
      });
    
    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. फ़ंक्शन को कॉल करते समय, सीमित इस्तेमाल के लिए टोकन पाने के लिए, अपने ऐप्लिकेशन क्लाइंट कोड को अपडेट करें:

    SwiftWebKotlinJava
    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();
    
    val yourCallableFunction = Firebase.functions.getHttpsCallable("yourCallableFunction") {
        limitedUseAppCheckTokens = true
    }
    val result = yourCallableFunction.call().await()
    
    HttpsCallableReference yourCallableFunction = FirebaseFunctions.getInstance().getHttpsCallable(
            "yourCallableFunction",
            new HttpsCallableOptions.Builder()
                    .setLimitedUseAppCheckTokens(true)
                    .build()
    );
    Task<HttpsCallableResult> result = yourCallableFunction.call();