स्पष्टीकरण: मोबाइल ऐप = मूल ऐप
जैसा कि अन्य टिप्पणियों और ऑनलाइन कुछ स्रोतों में कहा गया है, निहितार्थ मोबाइल एप्लिकेशन के लिए एक प्राकृतिक फिट की तरह लगता है, हालांकि सबसे अच्छा समाधान हमेशा स्पष्ट कटौती नहीं है (और वास्तव में नीचे दिए गए कारणों के लिए निहित नहीं की सिफारिश की गई है)।
देशी ऐप OAuth2 सर्वश्रेष्ठ अभ्यास
आप जो भी दृष्टिकोण चुनते हैं (विचार करने के लिए कुछ व्यापार बंद हैं), आपको OAuth2 का उपयोग करके मूल एप्लिकेशन के लिए यहां बताए गए सर्वोत्तम तरीकों पर ध्यान देना चाहिए: https://tools.ietf.org/html/rfc8252
निम्नलिखित विकल्पों पर विचार करें
अंतर्निहित
क्या मुझे निहित का उपयोग करना चाहिए?
धारा 8.2 https://tools.ietf.org/html/rfc8252#section-8.2 से उद्धृत करने के लिए
OAuth 2.0 अंतर्निहित अनुदान प्राधिकरण प्रवाह (OAuth 2.0 [RFC6749] की धारा 4.2 में परिभाषित) आमतौर पर ब्राउज़र में प्राधिकरण अनुरोध करने और URI- आधारित अंतर-एप्लिकेशन संचार के माध्यम से प्राधिकरण प्रतिक्रिया प्राप्त करने के अभ्यास के साथ काम करता है।
हालाँकि, अंतर्निहित प्रवाह को PKCE [RFC7636] (जो कि धारा icit.१ में आवश्यक है) द्वारा संरक्षित नहीं किया जा सकता है, देशी ऐप्स के साथ इम्प्लिक्ट फ्लो का उपयोग RECOMMENDED नहीं है ।
अंतर्निहित प्रवाह के माध्यम से दिए गए टोकन को भी उपयोगकर्ता सहभागिता के बिना ताज़ा नहीं किया जा सकता है, जिससे प्राधिकरण कोड अनुदान प्रवाह बन जाता है - जो ताज़ा टोकन जारी कर सकता है - देशी ऐप प्राधिकरणों के लिए अधिक व्यावहारिक विकल्प जो एक्सेस टोकन की ताज़ा आवश्यकता है।
प्राधिकरण कोड
यदि आप प्राधिकरण कोड के साथ जाते हैं, तो एक दृष्टिकोण आपके स्वयं के वेब सर्वर घटक के माध्यम से प्रॉक्सी के लिए होगा जो क्लाइंट सीक्रेट के साथ टोकन अनुरोधों को उपकरणों पर वितरित एप्लिकेशन पर संग्रहीत करने से बचने के लिए समृद्ध करता है।
नीचे से अंश: https://dev.fitbit.com/docs/oauth2/
एक वेब सेवा वाले अनुप्रयोगों के लिए प्राधिकरण कोड अनुदान प्रवाह की सिफारिश की जाती है। इस प्रवाह को एप्लिकेशन के क्लाइंट सीक्रेट का उपयोग करके सर्वर से सर्वर संचार की आवश्यकता होती है।
नोट: कभी भी अपने क्लाइंट को वितरित कोड में गुप्त न रखें, जैसे ऐप स्टोर या क्लाइंट-साइड जावास्क्रिप्ट के माध्यम से डाउनलोड किए गए ऐप।
जिन अनुप्रयोगों में वेब सेवा नहीं है, उन्हें इम्प्लिमेंट ग्रांट प्रवाह का उपयोग करना चाहिए।
निष्कर्ष
अंतिम निर्णय आपके वांछित उपयोगकर्ता अनुभव में कारक होना चाहिए, लेकिन आपके शॉर्टलिस्ट किए गए दृष्टिकोणों का उचित जोखिम मूल्यांकन करने और निहितार्थों को बेहतर ढंग से समझने के बाद जोखिम के लिए आपकी भूख भी।
एक महान पढ़ा यहाँ है https://auth0.com/blog/oauth-2-best-practices-for-native-apps/
एक अन्य है https://www.oauth.com/oauth2-servers/oauth-native-apps/ जो बताता है
वर्तमान उद्योग का सबसे अच्छा अभ्यास क्लाइंट सीक्रेट को छोड़ने के दौरान प्राधिकरण प्रवाह का उपयोग करना है, और प्रवाह को पूरा करने के लिए बाहरी उपयोगकर्ता एजेंट का उपयोग करना है। एक बाहरी उपयोगकर्ता एजेंट आमतौर पर डिवाइस का मूल ब्राउज़र होता है, (मूल ऐप से अलग सुरक्षा डोमेन के साथ), ताकि ऐप कुकी स्टोरेज तक नहीं पहुंच सके या ब्राउज़र के अंदर पेज की सामग्री का निरीक्षण या संशोधन न कर सके।
PKCE विचार
आपको PKCE पर भी विचार करना चाहिए जो यहाँ वर्णित है https://www.oauth.com/oauth2-servers/pkce/
विशेष रूप से, यदि आप प्राधिकरण सर्वर को भी लागू कर रहे हैं तो https://www.oauth.com/oauth2-servers/oauth-native-apps/checklist-server-support-native-apps/ बताता है कि आपको चाहिए
- ग्राहकों को अपने रीडायरेक्ट URL के लिए कस्टम URL स्कीम पंजीकृत करने की अनुमति दें।
- डेस्कटॉप ऐप्स का समर्थन करने के लिए लूपबैक आईपी पुनर्निर्देशित URL को मनमाने ढंग से पोर्ट नंबर के साथ।
- मत मानो देशी क्षुधा एक गुप्त रख सकते हैं। सभी ऐप्स को यह घोषित करने की आवश्यकता है कि क्या वे सार्वजनिक या गोपनीय हैं, और केवल गोपनीय ऐप के लिए ग्राहक रहस्य जारी करते हैं।
- PKCE एक्सटेंशन का समर्थन करें, और इसके लिए आवश्यक है कि सार्वजनिक ग्राहक इसका उपयोग करें।
- यह पता लगाने का प्रयास करें कि जब प्राधिकरण इंटरफ़ेस एक देशी ऐप के वेब दृश्य में एम्बेडेड है, सिस्टम ब्राउज़र में लॉन्च होने के बजाय, और आपके अनुरोधों को अस्वीकार कर देता है।
वेब दृश्य विचार
वेब दृश्यों यानी एक एम्बेडेड उपयोगकर्ता-एजेंट का उपयोग करके जंगली में कई उदाहरण हैं लेकिन इस दृष्टिकोण से बचा जाना चाहिए (विशेषकर जब ऐप प्रथम-पक्ष नहीं है) और कुछ मामलों में आपके द्वारा एपीआई के रूप में उपयोग करने पर प्रतिबंध लगाया जा सकता है। यहाँ से नीचे दिखाया गया है
OAuth 2.0 प्रमाणीकरण पृष्ठ को एम्बेड करने के किसी भी प्रयास के परिणामस्वरूप आपका एप्लिकेशन Fitbit API से प्रतिबंधित हो जाएगा।
सुरक्षा पर विचार के लिए, OAuth 2.0 प्राधिकरण पृष्ठ को समर्पित ब्राउज़र दृश्य में प्रस्तुत किया जाना चाहिए। Fitbit उपयोगकर्ता केवल पुष्टि कर सकते हैं कि वे वास्तविक Fitbit.com साइट के साथ प्रमाणित कर रहे हैं यदि उनके पास ब्राउज़र द्वारा प्रदान किए गए उपकरण हैं, जैसे कि URL बार और परिवहन परत सुरक्षा (TLS) प्रमाणपत्र जानकारी।
मूल अनुप्रयोगों के लिए, इसका अर्थ है कि डिफ़ॉल्ट पृष्ठ में प्राधिकरण पृष्ठ को खोलना होगा। नेटिव एप्लिकेशन कस्टम URL स्कीमों का उपयोग कर सकते हैं पुनर्निर्देशित URIs को ब्राउज़र से उपयोगकर्ता को पुनर्निर्देशित करने के लिए एप्लिकेशन को अनुमति का अनुरोध करने के लिए।
iOS एप्लिकेशन सफारी पर स्विच करने के बजाय SFSafariViewController वर्ग का उपयोग कर सकते हैं। WKWebView या UIWebView वर्ग का उपयोग निषिद्ध है।
एंड्रॉइड एप्लिकेशन डिफ़ॉल्ट ब्राउज़र पर ऐप स्विच करने के बजाय क्रोम कस्टम टैब का उपयोग कर सकते हैं। WebView का उपयोग निषिद्ध है।
आगे स्पष्ट करने के लिए, यहां ऊपर दिए गए सर्वोत्तम अभ्यास लिंक के पिछले मसौदे के इस भाग से एक उद्धरण दिया गया है
आमतौर पर वेब-विचारों के साथ कार्यान्वित एंबेडेड उपयोगकर्ता-एजेंट, देशी ऐप्स को अधिकृत करने के लिए एक वैकल्पिक तरीका है। हालांकि वे परिभाषा के अनुसार तृतीय-पक्ष द्वारा उपयोग के लिए असुरक्षित हैं। वे उपयोगकर्ता को अपने पूर्ण लॉगिन क्रेडेंशियल के साथ साइन इन करते हैं, केवल उन्हें कम शक्तिशाली OAuth क्रेडेंशियल्स के लिए नीचे गिरा दिया है।
यहां तक कि जब विश्वसनीय प्रथम-पक्ष एप्लिकेशन द्वारा उपयोग किया जाता है, तो एम्बेडेड उपयोगकर्ता-एजेंट कम से कम विशेषाधिकार के सिद्धांत का उल्लंघन करते हैं, जिससे वे आवश्यकता से अधिक शक्तिशाली क्रेडेंशियल प्राप्त करते हैं, संभवतः हमले की सतह को बढ़ाते हैं।
एम्बेडेड उपयोगकर्ता-एजेंटों के विशिष्ट वेब-व्यू आधारित कार्यान्वयन में, होस्ट एप्लिकेशन कर सकता है: उपयोगकर्ता नाम और पासवर्ड कैप्चर करने के लिए फॉर्म में दर्ज किए गए प्रत्येक कीस्ट्रोक को लॉग करें; स्वचालित रूप से फ़ॉर्म सबमिट करें और उपयोगकर्ता-सहमति को बायपास करें; सत्र कुकीज़ की प्रतिलिपि बनाएँ और उन्हें उपयोगकर्ता के रूप में प्रमाणित कार्य करने के लिए उपयोग करें।
उपयोगकर्ताओं को सामान्य एड्रेस बार और अन्य पहचान सुविधाओं के बिना एक एम्बेडेड वेब-व्यू में क्रेडेंशियल दर्ज करने के लिए प्रोत्साहित करना, जो ब्राउज़र के पास हैं, जिससे उपयोगकर्ता के लिए यह जानना असंभव हो जाता है कि क्या वे वैध साइट में साइन इन कर रहे हैं, और जब वे होते हैं, तो यह उन्हें प्रशिक्षित करता है यह पहले साइट को मान्य किए बिना क्रेडेंशियल दर्ज करने के लिए ठीक है।
सुरक्षा चिंताओं के अलावा, वेब-दृश्य प्रमाणीकरण स्थिति को अन्य एप्लिकेशन या सिस्टम ब्राउज़र के साथ साझा नहीं करते हैं, जिससे उपयोगकर्ता को प्रत्येक प्राधिकरण अनुरोध के लिए लॉगिन करने और एक खराब उपयोगकर्ता अनुभव के लिए अग्रणी की आवश्यकता होती है।
उपरोक्त के कारण, एम्बेडेड उपयोगकर्ता-एजेंटों का उपयोग RECOMMENDED नहीं है, सिवाय इसके कि एक विश्वसनीय प्रथम-पक्ष ऐप अन्य एप्लिकेशन के लिए बाहरी उपयोगकर्ता-एजेंट के रूप में कार्य करता है, या कई प्रथम-पार्टी ऐप्स के लिए एकल साइन-ऑन प्रदान करता है।
प्राधिकरण सर्वर SHOULD उन एम्बेडेड उपयोगकर्ता-एजेंटों के माध्यम से लॉगिन का पता लगाने और उन्हें अवरुद्ध करने के लिए कदम उठाने पर विचार करते हैं जो अपने स्वयं के नहीं हैं, जहां संभव हो।
कुछ दिलचस्प बिंदु यहां भी उठाए गए हैं: /security/179756/why-are-developers-use-embedded-user-agents-for-3rd-party-uth-what-are-the- ए