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

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

नीति उल्लंघन ठीक करने के तरीके लागू करने की सुविधा चालू करना

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

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

    Node.js (2nd gen)

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

    npm install firebase-functions@">=4.0.0"

    Node.js (1st gen)

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

    npm install firebase-functions@">=4.0.0"

    Python (झलक)

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

    firebase-functions >= 0.1.0
    

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

    ./venv/bin/pip install -r requirements.txt
    
  2. अपने फ़ंक्शन के लिए, App Check लागू करने का रनटाइम विकल्प चालू करें:

    Node.js (2nd gen)

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

    Node.js (1st gen)

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

    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
    

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

रीप्ले प्रोटेक्शन (बीटा वर्शन)

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

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

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

  1. Google Cloud कंसोल में जाकर, फ़ंक्शन के लिए इस्तेमाल किए गए सेवा खाते को "Firebase App Check Token Verifier" की भूमिका असाइन करें.

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

    Node.js (2nd gen)

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

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

    Swift

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

    Kotlin

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

    Web

    import { getFunctions, httpsCallable } from "firebase/functions";
    
    const yourCallableFunction = httpsCallable(
      getFunctions(),
      "yourCallableFunction",
      { limitedUseAppCheckTokens: true },
    );
    await yourCallableFunction();