अपने Firebase ML Android ऐप्लिकेशन के क्लाउड क्रेडेंशियल को सुरक्षित रखना

अगर आपका Android ऐप्लिकेशन, Firebase ML के किसी क्लाउड एपीआई का इस्तेमाल करता है, तो ऐप्लिकेशन को प्रोडक्शन में लॉन्च करने से पहले, आपको कुछ और कदम उठाने चाहिए. इससे, एपीआई को बिना अनुमति के ऐक्सेस करने से रोका जा सकता है.

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

इसके बाद, आपको सिर्फ़ डीबग करने के लिए एक एपीआई पासकोड बनाना होगा. इसका इस्तेमाल, जांच और डेवलपमेंट के दौरान किया जा सकता है.

1. अपने प्रोडक्शन ऐप्लिकेशन, Firebase के साथ रजिस्टर करें

सबसे पहले, अपने प्रोडक्शन ऐप्लिकेशन को Firebase के साथ रजिस्टर करें.

  1. पक्का करें कि आपके पास अपने ऐप्लिकेशन के SHA-1 हस्ताक्षर हों. इसके बारे में जानने के लिए, अपने क्लाइंट की पुष्टि करना लेख पढ़ें.

  2. Firebase कंसोल में, प्रोजेक्ट सेटिंग पर जाएं. इसके बाद, सेटिंग टैब को चुनें.

  3. नीचे की ओर स्क्रोल करके, आपके ऐप्लिकेशन कार्ड पर जाएं. इसके बाद, अपना Android ऐप्लिकेशन चुनें.

  4. अपने ऐप्लिकेशन की जानकारी में, अपने ऐप्लिकेशन का SHA-1 हस्ताक्षर जोड़ें.

2. अपनी एपीआई कुंजियों के दायरे को सीमित करना

इसके बाद, Cloud Vision API का ऐक्सेस न देने के लिए, अपनी मौजूदा एपीआई कुंजियों को कॉन्फ़िगर करें:

  1. Google Cloud कंसोल का क्रेडेंशियल पेज खोलें. जब कहा जाए, तब अपना प्रोजेक्ट चुनें.

  2. सूची में मौजूद हर मौजूदा एपीआई पासकोड के लिए, बदलाव करने वाला व्यू खोलें.

  3. एपीआई से जुड़ी पाबंदियां सेक्शन में, कुंजी पर पाबंदी लगाएं को चुनें. इसके बाद, उन सभी एपीआई को सूची में जोड़ें जिनका ऐक्सेस आपको एपीआई कुंजी को देना है. पक्का करें कि आपने Cloud Vision API को शामिल न किया हो.

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

अब आपकी मौजूदा एपीआई पासकोड, क्लाउड पर उपलब्ध एमएल सेवाओं का ऐक्सेस नहीं देंगे. हालांकि, हर पासकोड उन सभी एपीआई के लिए काम करता रहेगा जिन्हें आपने एपीआई से जुड़ी पाबंदियों की सूची में जोड़ा है.

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

3. सिर्फ़ डीबग एपीआई पासकोड बनाना और उसका इस्तेमाल करना

आखिर में, सिर्फ़ डेवलपमेंट के लिए इस्तेमाल की जाने वाली नई एपीआई कुंजी बनाएं. Firebase ML इस एपीआई पासकोड का इस्तेमाल, ऐसी जगहों पर Google Cloud की सेवाओं को ऐक्सेस करने के लिए कर सकता है जहां ऐप्लिकेशन की पुष्टि नहीं की जा सकती. जैसे, एम्युलेटर पर काम करते समय.

  1. डेवलपमेंट के लिए इस्तेमाल किया जाने वाला नया एपीआई पासकोड बनाएं:

    1. Google Cloud कंसोल का क्रेडेंशियल पेज खोलें. जब कहा जाए, तब अपना प्रोजेक्ट चुनें.

    2. क्रेडेंशियल बनाएं > एपीआई पासकोड पर क्लिक करें और नई एपीआई पासकोड को नोट करें. इस कुंजी की मदद से, उन ऐप्लिकेशन से एपीआई ऐक्सेस किया जा सकता है जिनकी पुष्टि नहीं हुई है. इसलिए, इस कुंजी को गोपनीय रखें.

  2. यह पक्का करने के लिए कि रिलीज़ किए गए ऐप्लिकेशन के साथ, नई डीबग एपीआई कुंजी लीक न हो, सिर्फ़ डीबग बाइल्ड के लिए इस्तेमाल की जाने वाली Android मेनिफ़ेस्ट फ़ाइल में डीबग एपीआई कुंजी डालें:

    1. अगर आपके पास पहले से कोई डीबग मेनिफ़ेस्ट नहीं है, तो फ़ाइल > नया > अन्य > Android मेनिफ़ेस्ट फ़ाइल पर क्लिक करके और टारगेट सोर्स सेट से debug चुनकर एक डीबग मेनिफ़ेस्ट फ़ाइल बनाएं.

    2. डीबग मेनिफ़ेस्ट में, यह एलान जोड़ें:

      <application>
      <meta-data
          android:name="com.firebase.ml.cloud.ApiKeyForDebug"
          android:value="your-debug-api-key" />
      </application>
  3. अपने ऐप्लिकेशन में, Firebase ML को कॉन्फ़िगर करें, ताकि प्रोडक्शन में अपने क्लाइंट की पुष्टि करने के लिए, सर्टिफ़िकेट फ़िंगरप्रिंट मैचिंग का इस्तेमाल किया जा सके. साथ ही, सिर्फ़ डीबग बिल्ड में एपीआई पासकोड (डीबग पासकोड) का इस्तेमाल किया जा सके:

    Kotlin+KTX

    val optionsBuilder = FirebaseVisionCloudImageLabelerOptions.Builder()
    if (!BuildConfig.DEBUG) {
        // Requires physical, non-rooted device:
        optionsBuilder.enforceCertFingerprintMatch()
    }
    
    // Set other options. For example:
    optionsBuilder.setConfidenceThreshold(0.8f)
    // ...
    
    // And lastly:
    val options = optionsBuilder.build()
    FirebaseVision.getInstance().getCloudImageLabeler(options).processImage(myImage)

    Java

    FirebaseVisionCloudImageLabelerOptions.Builder optionsBuilder =
            new FirebaseVisionCloudImageLabelerOptions.Builder();
    if (!BuildConfig.DEBUG) {
        // Requires physical, non-rooted device:
        optionsBuilder.enforceCertFingerprintMatch();
    }
    
    // Set other options. For example:
    optionsBuilder.setConfidenceThreshold(0.8f);
    // ...
    
    // And lastly:
    FirebaseVisionCloudImageLabelerOptions options = optionsBuilder.build();
    FirebaseVision.getInstance().getCloudImageLabeler(options).processImage(myImage);

अगले चरण

Firebase की अन्य सुविधाओं का इस्तेमाल करते समय, अपने ऐप्लिकेशन को लॉन्च करने के लिए तैयार करने के बारे में जानकारी पाने के लिए, लॉन्च की चेकलिस्ट देखें.