अपने 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 की अन्य सुविधाओं का इस्तेमाल करते समय, अपने ऐप्लिकेशन को लॉन्च करने के लिए तैयार करने के बारे में जानकारी पाने के लिए, लॉन्च की चेकलिस्ट देखें.