अपने 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 Console का क्रेडेंशियल पेज खोलें. जब कहा जाए, तब अपना प्रोजेक्ट चुनें.

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

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

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

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

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

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

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

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

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

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

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

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