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

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

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

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

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

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

    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 टूल अपने-आप काम करता है कॉल किए जा सकने वाले फ़ंक्शन को शुरू करते समय, ऐप्लिकेशन चेक टोकन अटैच करें.

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

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

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

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

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

    • अगर आपको साफ़ तौर पर Admin SDK टूल शुरू करना है और आपने प्रोजेक्ट के एडमिन SDK सेवा खाते के क्रेडेंशियल हैं, तो ज़रूरी भूमिका है पहले ही स्वीकार कर लिया है.
    • अगर पहली जनरेशन के Cloud Functions का इस्तेमाल, डिफ़ॉल्ट एडमिन के साथ किया जा रहा है, तो SDK कॉन्फ़िगरेशन, App Engine डिफ़ॉल्ट सेवा को भूमिका दें जोड़ें. सेवा खाते की अनुमतियां बदलना लेख पढ़ें.
    • अगर दूसरी पीढ़ी के Cloud Functions का इस्तेमाल, डिफ़ॉल्ट एडमिन के साथ किया जा रहा है, तो SDK टूल कॉन्फ़िगरेशन, कंप्यूट सेवा की डिफ़ॉल्ट सेवा को भूमिका दें जोड़ें.
  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();