यह पुष्टि करते समय कि उपयोगकर्ता ने Google Play Store से आपके ऐप्लिकेशन की सही कॉपी खरीदी है या डाउनलोड की है, लाइसेंस की पुष्टि करने के लिए किसी ऐसे सर्वर का इस्तेमाल करना सबसे अच्छा होता है जिसे आपने कंट्रोल किया हो.
इस गाइड में, सर्वर साइड से लाइसेंस की पुष्टि करने की प्रोसेस को सिलसिलेवार तरीके से बताया गया है. साथ ही, इस जांच को करने के कुछ सबसे सही तरीके भी बताए गए हैं.
प्रोसेस के बारे में खास जानकारी
पहले चित्र में दिखाया गया है कि आपके ऐप्लिकेशन, Google Play, और आपके निजी सर्वर के बीच जानकारी कैसे ट्रांसफ़र की जाती है:
- आपका ऐप्लिकेशन, Google Play से यह अनुरोध करता है कि किसी उपयोगकर्ता ने आपके ऐप्लिकेशन की सही कॉपी खरीदी है या डाउनलोड की है या नहीं.
- Google Play, आपके ऐप्लिकेशन पर रिस्पॉन्स डेटा ऑब्जेक्ट भेजकर जवाब देता है. यह ऑब्जेक्ट,
ResponseData
टाइप का होता है. यह ऑब्जेक्ट, हस्ताक्षर की गई जानकारी का एक हिस्सा होता है. इससे पता चलता है कि उपयोगकर्ता ने आपके ऐप्लिकेशन की सही कॉपी खरीदी है या डाउनलोड की है. - आपका ऐप्लिकेशन, आपके कंट्रोल वाले निजी सर्वर से अनुरोध करता है. साथ ही, जवाब के डेटा के कॉन्टेंट की पुष्टि करता है.
- सर्वर, आपके ऐप्लिकेशन को एक स्टेटस भेजकर जवाब देता है. इससे पता चलता है कि उपयोगकर्ता ने आपके ऐप्लिकेशन की मान्य कॉपी खरीदी है या डाउनलोड की है. अगर सर्वर "सफलता" मैसेज देता है, तो जवाब की पुष्टि करें. इसके बाद, उपयोगकर्ता को उन संसाधनों का ऐक्सेस दें जिनके लिए लाइसेंस की ज़रूरत होती है.
रिस्पॉन्स डेटा पर Google Play साइन करता है और फिर उसे आपके सर्वर पर जांचा जाता है. इसलिए, आपके ऐप्लिकेशन को चलाने वाले डिवाइस पर मौजूद ऑब्जेक्ट में बदलाव नहीं किया जा सकता. अगर आपका ऐप्लिकेशन सर्वर पर निर्भर करता है और संसाधनों को सिर्फ़ सही उपयोगकर्ताओं के लिए उपलब्ध कराता है, तो आपका ऐप्लिकेशन बिना अनुमति वाले उपयोगकर्ताओं से ज़्यादा सुरक्षित होता है.
यहां दिए गए सेक्शन में, लाइसेंस की पुष्टि करने के लिए, सर्वर-साइड की सुविधा इस्तेमाल करते समय ध्यान रखने वाली अन्य बातों के बारे में बताया गया है.
जवाबी हमलों से सुरक्षित रहना
उपयोगकर्ता के लाइसेंस की स्थिति के बारे में Google Play से जवाब मिलने के बाद, वह जवाब का डेटा कॉपी करके कई बार इस्तेमाल कर सकता है. इसके अलावा, वह इस डेटा को अन्य उपयोगकर्ताओं को भी दे सकता है. इसके बाद, वे आपके ऐप्लिकेशन के निजी सर्वर पर अपने अनुरोध बना सकते हैं. इस तरह की कार्रवाई को रीप्ले अटैक कहा जाता है.
उपयोगकर्ताओं के रीप्ले हमले करने की संभावना को कम करने के लिए, अपने ऐप्लिकेशन के सर्वर को अनुरोध भेजने से पहले ये कार्रवाइयां करें:
जवाब के डेटा में शामिल टाइमस्टैंप की जांच करें. इससे यह पक्का किया जा सकता है कि Google Play ने जवाब हाल ही में जनरेट किया है.
अपने सर्वर अनुरोध पर दर-सीमा लागू करें, जैसे कि एक्सपोनेंशियल बैकऑफ़. इससे, आपके ऐप्लिकेशन के सर्वर को एक ही रिस्पॉन्स डेटा भेजने की कोशिशों की संख्या कम हो जाएगी.
अपने निजी सर्वर पर, Google Play के रिस्पॉन्स डेटा के कॉन्टेंट की पुष्टि करने से पहले, अपने निजी सर्वर पर पुष्टि करने के लिए शुरुआती अनुरोध करें. इस पहले अनुरोध में, अपने सर्वर पर उपयोगकर्ता के क्रेडेंशियल भेजें. इसके बाद, अपने सर्वर को नॉन्स या ऐसे नंबर का जवाब दें जिसका इस्तेमाल सिर्फ़ एक बार किया जाता है. इसके बाद, अपने निजी सर्वर से अगले अनुरोध में इस नॉन्स को शामिल करें. साथ ही, लाइसेंस की पुष्टि करने के लिए डेटा मांगें. नॉन्स के लिए अच्छी वैल्यू चुनने का तरीका जानने के लिए, नॉन्स की सही वैल्यू जनरेट करना सेक्शन देखें.
सही नॉन्स वैल्यू जनरेट करना
ऐसी नॉन्स वैल्यू बनाने के लिए, इनमें से किसी एक तकनीक का इस्तेमाल करें जिसका अनुमान लगाना मुश्किल हो:
- उपयोगकर्ता के आईडी के आधार पर, हैश वैल्यू जनरेट करें.
- हर उपयोगकर्ता के लिए कोई भी वैल्यू जनरेट करें. इस रैंडम वैल्यू को अपने ऐप्लिकेशन के सर्वर पर, किसी उपयोगकर्ता के एट्रिब्यूट के हिस्से के तौर पर सेव करें.
अपने सर्वर से मिले रिस्पॉन्स डेटा की पुष्टि करना
आपके ऐप्लिकेशन का सर्वर, आपके ऐप्लिकेशन को जो रिस्पॉन्स डेटा भेजता है उसकी समीक्षा करते समय, पक्का करें कि लाइसेंस की पुष्टि करने वाली लाइब्रेरी का रिस्पॉन्स फ़र्ज़ी न हो. ऐप्लिकेशन सर्वर के रिस्पॉन्स डेटा में शामिल हस्ताक्षर की पुष्टि करें. इसके लिए, हस्ताक्षर की तुलना उस कुंजी से करें जो आपके ऐप्लिकेशन को पिछले चरण में Google Play से मिली थी.
यह भी ध्यान रखें कि लाइसेंस की पुष्टि करने वाली लाइब्रेरी (एलवीएल) से जुड़ा ब्लॉक ही ऐसा हिस्सा है जिस पर हस्ताक्षर किया गया है. इसलिए, आपके ऐप्लिकेशन को अपने ऐप्लिकेशन सर्वर के रिस्पॉन्स डेटा में सिर्फ़ इस हिस्से पर भरोसा करना चाहिए.