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

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

लागू करना चालू करना

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

  1. Cloud Functions 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"

    Python (प्रीव्यू)

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

    firebase-functions >= 0.1.0
    

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

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

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

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

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

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

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

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

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

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

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

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

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