क्लाउड फ़ंक्शंस के लिए ऐप चेक प्रवर्तन सक्षम करें

जब आप समझ जाते हैं कि ऐप चेक आपके उपयोगकर्ताओं को कैसे प्रभावित करेगा और आप आगे बढ़ने के लिए तैयार हैं, तो आप ऐप चेक प्रवर्तन सक्षम कर सकते हैं।

प्रवर्तन को सक्षम करना

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

  1. क्लाउड फ़ंक्शंस SDK इंस्टॉल करें।

    नोड.जेएस (पहली पीढ़ी)

    अपने प्रोजेक्ट की 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"
    

    पायथन (पूर्वावलोकन)

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

    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
    

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

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

कॉल करने योग्य फ़ंक्शन को रीप्ले हमलों से बचाने के लिए, आप इसे सत्यापित करने के बाद ऐप चेक टोकन का उपभोग कर सकते हैं। एक बार टोकन ख़त्म हो जाने के बाद, इसे दोबारा उपयोग नहीं किया जा सकता है।

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

टोकन का उपभोग करने के लिए:

  1. क्लाउड कंसोल में, क्लाउड फ़ंक्शन द्वारा उपयोग किए जाने वाले सेवा खाते को "फ़ायरबेस ऐप चेक टोकन सत्यापनकर्ता" भूमिका प्रदान करें।

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

    नोड.जेएस (पहली पीढ़ी)

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