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

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

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

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

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

    Node.js (1st gen)

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

    npm install firebase-functions@">=4.0.0"

    Node.js (2nd 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. अपने फ़ंक्शन के लिए, रनटाइम के दौरान ऐप्लिकेशन की जांच करने की सुविधा चालू करें:

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

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

    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 टोकन की ज़रूरत होगी. कॉल किए जा सकने वाले फ़ंक्शन को कॉल करने पर, Cloud Functions क्लाइंट SDK टूल अपने-आप एक App Check टोकन अटैच कर देते हैं.

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

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

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

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

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

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

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

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