मोबाइल ऐप के लिए सही OAuth 2.0 प्रवाह क्या है


88

मैं OAuth 2.0 का उपयोग करते हुए मोबाइल एप्लिकेशन के लिए एक वेब एपीआई में प्रतिनिधि प्राधिकरण को लागू करने की कोशिश कर रहा हूं। विनिर्देश के अनुसार, अंतर्निहित अनुदान प्रवाह ताज़ा टोकन का समर्थन नहीं करता है, जिसका अर्थ है कि एक बार एक्सेस टोकन को किसी विशेष अवधि के लिए दिए जाने के बाद, उपयोगकर्ता को टोकन समाप्त होने के बाद ऐप को फिर से अनुमति देना होगा या इसे रद्द कर दिया जाना चाहिए।

मुझे लगता है कि यह ब्राउज़र पर चलने वाले कुछ जावास्क्रिप्ट कोड के लिए एक अच्छा परिदृश्य है जैसा कि विनिर्देश में वर्णित है। मैं उस समय को कम से कम करने की कोशिश कर रहा हूं जब उपयोगकर्ता को टोकन प्राप्त करने के लिए ऐप को अनुमति देनी चाहिए, इसलिए ऐसा लगता है कि प्राधिकरण कोड प्रवाह एक अच्छा विकल्प है क्योंकि यह ताज़ा टोकन का समर्थन करता है।

हालाँकि, यह प्रवाह पुनर्निर्देशन करने के लिए एक वेब ब्राउज़र पर बहुत अधिक निर्भर करता है। मैं सोच रहा हूं कि क्या यह प्रवाह अभी भी एक मोबाइल एप्लिकेशन के लिए एक अच्छा विकल्प है अगर एक एम्बेडेड वेब ब्राउज़र का उपयोग किया जाता है। या मुझे निहित प्रवाह के साथ जाना चाहिए?


1
सवाल यह होगा - क्या यह सर्वोच्च प्राथमिकता की तरह है कि उपयोगकर्ता को कभी भी पहले लॉगिन के बाद फिर से पासवर्ड टाइप नहीं करना पड़ता है?
leastprivilege

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

1
आप अनंत जीवनकाल के साथ एक टोकन जोड़ सकते हैं और फिर भी इसे रद्द कर सकते हैं। और हां, ऐप लॉजिक का पता लगाने में सक्षम होना चाहिए। RFC 6750 यह जांचने का एक तरीका निर्धारित करता है कि क्या त्रुटि एक उलट टोकन के कारण है।
पेड्रो फेलिक्स

1
कृपया वेब दृश्यों से बचें (जब तक कि आप पूर्ण स्टैक के मालिक नहीं हैं और सामाजिक लॉगिन का उपयोग नहीं कर रहे हैं) जो पासवर्ड से समझौता करने की संभावना को खोलते हैं। जब मुझे तृतीय-पक्ष एम्बेडेड उपयोगकर्ता-एजेंट द्वारा क्रेडेंशियल्स के लिए कहा जाता है तो मैं ऐप को अनइंस्टॉल कर दूंगा। कुछ एपीआई अब इस तरह के एकीकरण पर भी प्रतिबंध लगाते हैं जैसे कि यह एक dev.fitbit.com/docs/oauth2 I ने इन अवधारणाओं में से कुछ को स्पष्ट करने के लिए एक और उत्तर प्रदान किया है ( stackoverflow.com/a/38582630/752167 )
मैट सी

जवाबों:


90

स्पष्टीकरण: मोबाइल ऐप = मूल ऐप

जैसा कि अन्य टिप्पणियों और ऑनलाइन कुछ स्रोतों में कहा गया है, निहितार्थ मोबाइल एप्लिकेशन के लिए एक प्राकृतिक फिट की तरह लगता है, हालांकि सबसे अच्छा समाधान हमेशा स्पष्ट कटौती नहीं है (और वास्तव में नीचे दिए गए कारणों के लिए निहित नहीं की सिफारिश की गई है)।

देशी ऐप 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- ए


3
Google 20 अप्रैल, 2017 के डेवलपरों के
मैट सी

FYI करें, इस उत्तर की शुरुआत में दस्तावेज़ का संदर्भ यदि ड्राफ्ट नहीं है तो OAuth 2.0 के लिए मूल निवासी ऐप्स - tools.ietf.org/html/rfc8252
Kostiantyn Sokolinskyi

धन्यवाद @KostiantynSokolinskyi, rfc जो अब मसौदा नहीं है के लिए लिंक के साथ संपादित
मैट C

@MattC नए उपयोगकर्ता के पंजीकरण को लागू करने का सबसे अच्छा तरीका क्या है? क्या हमें इसे ऐप के भीतर या आईडीपी पर करना चाहिए? क्या उपयोगकर्ता पोस्ट रजिस्टर को ऑटो-लॉगिन करना संभव है? stackoverflow.com/questions/60187173/…
यशवित

क्षमा करें, मैं कुछ विवरणों के बारे में उलझन में हूँ ... क्या आप कृपया देख सकते हैं? धन्यवाद! लिंक ---> stackoverflow.com/q/61313694/4619958
ch271828n

25

दुर्भाग्य से, मुझे नहीं लगता कि इस प्रश्न का कोई स्पष्ट उत्तर है। हालांकि, यहां वे विकल्प दिए गए हैं जिनकी मैंने पहचान की है:

  • यदि उपयोगकर्ता को उसकी साख के लिए पूछना ठीक है, तो संसाधन स्वामी पासवर्ड क्रेडेंशियल्स का उपयोग करें । हालाँकि, यह कुछ कारणों के लिए संभव नहीं हो सकता है, अर्थात्

    • उपयोगिता या सुरक्षा नीतियां सीधे ऐप में पासवर्ड डालने से मना करती हैं
    • प्रमाणीकरण प्रक्रिया एक बाहरी पहचान प्रदाता पर प्रत्यायोजित की जाती है और इसे HTTP पुनर्निर्देशित-आधारित प्रवाह (जैसे OpenID, SAMLP या WS-Federation) के माध्यम से किया जाना चाहिए।
  • यदि ब्राउज़र आधारित प्रवाह का उपयोग आवश्यक है, तो प्राधिकरण कोड प्रवाह का उपयोग करें । यहाँ, की परिभाषा redirect_uriएक बड़ी चुनौती है, जिसके लिए निम्नलिखित विकल्प हैं:

    • Https://developers.google.com/accounts/docs/OAuth2InstalledApp में वर्णित तकनीक का उपयोग करें , जहां एक विशेष redirect_uri(जैसे urn:ietf:wg:oauth:2.0:oob) ग्राहक एप्लिकेशन को वापस रीडायरेक्ट करने के बजाय प्राधिकरण कोड दिखाने के लिए प्राधिकरण समापन बिंदु को इंगित करता है। उपयोगकर्ता इस कोड को मैन्युअल रूप से कॉपी कर सकता है या ऐप इसे HTML दस्तावेज़ शीर्षक से प्राप्त करने का प्रयास कर सकता है।
    • localhostडिवाइस पर एक सर्वर का उपयोग करें (पोर्ट प्रबंधन आसान नहीं हो सकता है)।
    • एक कस्टम यूआरआई योजना (जैसे myapp://...) का उपयोग करें जब एक पंजीकृत "हैंडलर" को ट्रिगर किया जाता है (विवरण मोबाइल प्लेटफॉर्म पर निर्भर करता है)।
    • यदि उपलब्ध हो, तो HTTP रीडायरेक्ट प्रतिक्रियाओं को नियंत्रित और एक्सेस करने के लिए, विंडोज 8 पर WebAuthenticationBroker जैसे एक विशेष "वेब दृश्य" का उपयोग करें।

उम्मीद है की यह मदद करेगा

पेड्रो


इनपुट के लिए पेड्रो धन्यवाद!। हां, यह कस्टम यूआरआई योजना के साथ प्राधिकरण कोड फ्लो की तरह दिखता है या वेब व्यू यहां सबसे अच्छा विकल्प लगता है।
पाब्लो सिबेरो

1
यह सब इस बात पर निर्भर करता है कि क्या आप क्लाइंट को वेब दृश्य में या क्लाइंट ऐप में पासवर्ड टाइप करना चाहते हैं। यदि संभव हो तो, मैं ग्राहक ऐप को प्राथमिकता दूंगा - फिर तुरंत एक एक्सेस / रिफ्रेश टोकन के साथ गुप्त विनिमय करें।
leastprivilege

धन्यवाद डोमिनिक! मेरा ग्राहक उपयोगकर्ताओं को प्रमाणित करने के लिए ADFS का उपयोग कर रहा है, इसलिए वे लॉगिन पृष्ठ में क्रेडेंशियल दर्ज करना चाहते हैं। वेब दृश्य उनके लिए काम करेगा
पाब्लो सिबेरो

5
मैं उत्सुक हूं कि आप "प्राधिकरण कोड प्रवाह" की सिफारिश क्यों करेंगे? क्या आपको access_token के लिए कोड का आदान-प्रदान करने के लिए client_secret और client_id की आवश्यकता नहीं होगी? मैंने सोचा कि "निहित" प्रवाह इन परिदृश्यों के लिए डिज़ाइन किया गया था, क्योंकि इसे डिवाइस में संग्रहीत किए जाने वाले रहस्यों की आवश्यकता नहीं है।
यूजीनियो पेस

1
अंतर्निहित ताज़ा टोकन OOB का समर्थन नहीं करता है। पाब्लो के परिदृश्य में - मैं स्पष्ट रूप से आरओ प्रवाह की सिफारिश करूंगा। कंपनी की तरह लगता है एक ही कंपनी बैकएंड के खिलाफ क्षुधा तैनात।
कम

9

टीएल; डीआर: पीकेसीई के साथ प्राधिकरण कोड ग्रांट का उपयोग करें

1. लागू अनुदान प्रकार

अंतर्निहित अनुदान प्रकार मोबाइल एप्लिकेशन के साथ काफी लोकप्रिय है। लेकिन इसे इस तरह इस्तेमाल करने का मतलब नहीं था। पुनर्निर्देश के चारों ओर सुरक्षा संबंधी चिंताएँ हैं। जस्टिन अमीर राज्यों :

समस्या तब आती है जब आपको पता चलता है कि एक दूरस्थ सर्वर URL के विपरीत, यह सुनिश्चित करने का कोई विश्वसनीय तरीका नहीं है कि किसी दिए गए पुनर्निर्देशित URI और एक विशिष्ट मोबाइल एप्लिकेशन के बीच बंधन को सम्मानित किया जाए। डिवाइस पर कोई भी ऐप खुद को पुनर्निर्देशन प्रक्रिया में सम्मिलित करने का प्रयास कर सकता है और इसका कारण रीडायरेक्ट URI हो सकता है। और क्या लगता है: यदि आपने अपने मूल आवेदन में निहित प्रवाह का उपयोग किया है, तो आपने हमलावर को अपनी पहुंच टोकन सौंप दी है। उस बिंदु से कोई पुनर्प्राप्ति नहीं है - उन्हें टोकन मिल गया है और वे इसका उपयोग कर सकते हैं।

और इस तथ्य के साथ, कि यह आपको एक्सेस टोकन को ताज़ा करने की अनुमति नहीं देता है, बेहतर रूप से इससे बचें।

2. प्राधिकरण कोड अनुदान प्रकार

प्राधिकरण कोड अनुदान के लिए एक ग्राहक रहस्य की आवश्यकता होती है। लेकिन आपको अपने मोबाइल ऐप के स्रोत कोड में संवेदनशील जानकारी संग्रहीत नहीं करनी चाहिए। लोग उन्हें निकाल सकते हैं। क्लाइंट के रहस्य को उजागर न करने के लिए, आपको एक सर्वर बिचौलिया के रूप में चलाना होगा जैसा कि फेसबुक लिखता है :

हम अनुशंसा करते हैं कि सबसे अच्छी सुरक्षा प्रदान करने के लिए ऐप एक्सेस टोकन का उपयोग केवल आपके ऐप के सर्वर से सीधे किया जाना चाहिए। देशी ऐप्स के लिए, हम सुझाव देते हैं कि ऐप आपके स्वयं के सर्वर और सर्वर के साथ संचार करता है और फिर ऐप एक्सेस टोकन का उपयोग करके फेसबुक से एपीआई अनुरोध करता है।

आदर्श समाधान नहीं है, लेकिन नया है, मोबाइल उपकरणों पर OAuth करने का एक बेहतर तरीका: कोड एक्सचेंज के लिए सबूत कुंजी

3. प्राधिकरण कोड ग्रांट टाइप पीकेसीई (कोड एक्सचेंज के लिए प्रमुख कुंजी)

सीमाओं से बाहर, एक नई तकनीक बनाई गई थी जो आपको क्लाइंट कोड के बिना प्राधिकरण कोड का उपयोग करने देती है। आप पूर्ण RFC 7636 या इस संक्षिप्त परिचय को पढ़ सकते हैं ।

PKCE (RFC 7636) सार्वजनिक ग्राहकों को सुरक्षित करने के लिए एक तकनीक है जो ग्राहक रहस्य का उपयोग नहीं करती है।

यह मुख्य रूप से देशी और मोबाइल एप्लिकेशन द्वारा उपयोग किया जाता है, लेकिन तकनीक को किसी भी सार्वजनिक ग्राहक के लिए भी लागू किया जा सकता है। इसे प्राधिकरण सर्वर द्वारा अतिरिक्त समर्थन की आवश्यकता है, इसलिए यह केवल कुछ प्रदाताओं पर समर्थित है।

से https://oauth.net/2/pkce/


-3

एंड्रॉइड प्लेटफॉर्म पर OAuth2.0 प्रोटोकॉल को लागू करने के लिए अपने मोबाइल एप्लिकेशन में एक वेबव्यू का उपयोग करना एक किफायती तरीका होना चाहिए।

Redirect_uri फ़ील्ड के लिए, मुझे लगता http://localhostहै कि यह एक अच्छा विकल्प है और आपको अपने एप्लिकेशन के अंदर HTTP सर्वर को पोर्ट करने की आवश्यकता नहीं है, क्योंकि आप कक्षा onPageStartedमें फ़ंक्शन के कार्यान्वयन को ओवरराइड कर सकते हैं WebViewClientऔर पैरामीटर की http://localhostजांच करने के बाद से वेब पेज को लोड करना बंद कर सकते हैं url

public void onPageStarted(final WebView webView, final String url,
        final Bitmap favicon) {}

3
OAuth2 का उपयोग करने वाले मूल एप्लिकेशन के लिए सर्वोत्तम अभ्यास: tools.ietf.org/html/draft-wdenniss-oauth-native-apps
मैट सी

1
जैसा कि मैट सी ने कहा, ऊपर। वेब दृश्य मोबाइल एप्लिकेशन के लिए एक बुरा विचार हैं - वे असुरक्षित हैं, एप्लिकेशन को क्रेडेंशियल्स तक पहुंच प्राप्त करने की अनुमति देते हैं (इसलिए आरओ से अधिक सुरक्षित नहीं है) और उपयोगकर्ताओं को डोमेन और टीएलएस प्रमाणपत्रों को सत्यापित करने की अनुमति नहीं देते हैं। एक कस्टम यूआरआई हैंडलर के साथ प्रामाणिक कोड अनुदान प्रकार का उपयोग करें, और सुनिश्चित करें कि आप अपने फोन पर दुर्भावनापूर्ण ऐप्स को रोकने के लिए कुंजी कोड (पीकेसीई) के लिए प्रूफ कोड का उपयोग कर रहे हैं जो कि कोड को इंटरसेप्ट कर रहा है और आपके एपीआई तक पहुंच प्राप्त कर रहा है।
क्रिसक

2
नेटिव एप्स के लिए ड्राफ्ट OAuth 2.0 के अपडेटेड वर्जन बेस्ट प्रैक्टिस डॉक्यूमेंट टूल्स
Jeff Olson

-4

प्रमाणीकरण के लिए सबसे आसान उपयोगकर्ता अनुभव, और लागू करने के लिए सबसे आसान आपके ऐप में एक वेबव्यू एम्बेड करना है। प्रमाणीकरण बिंदु से वेबव्यू द्वारा प्राप्त प्रतिक्रियाओं की प्रक्रिया करें और त्रुटि (उपयोगकर्ता रद्द) या अनुमोदन (और url क्वेरी पैरामीटर से टोकन निकालें) का पता लगाएं। और मुझे लगता है कि आप वास्तव में सभी प्लेटफार्मों में ऐसा कर सकते हैं। मैंने निम्नलिखित के लिए यह काम सफलतापूर्वक किया है: ios, android, mac, windows store 8.1 apps, windows phone 8.1 app। मैंने यह निम्नलिखित सेवाओं के लिए किया: ड्रॉपबॉक्स, गूगल ड्राइव, ऑनड्राइव, बॉक्स, बेसकैंप। गैर-विंडोज़ प्लेटफार्मों के लिए, मैं ज़मारिन का उपयोग कर रहा था जो माना जाता है कि पूरे प्लेटफ़ॉर्म विशिष्ट एपीआई को उजागर नहीं करता है, फिर भी इसने इसे संभव बनाने के लिए पर्याप्त खुलासा किया। तो यह एक पार मंच के नजरिए से भी एक बहुत सुलभ समाधान है, और आप डॉन '


एक सुविधाजनक उपयोगकर्ता अनुभव प्रदान करते हुए, हम उद्योग को इस दृष्टिकोण से दूर जाते देखेंगे। जैसा कि वेब दृश्य पासवर्ड से समझौता करने की संभावना को खोलते हैं, जब मुझे एक एम्बेडेड उपयोगकर्ता-एजेंट द्वारा क्रेडेंशियल्स के लिए कहा जाता है तो मैं ऐप को अनइंस्टॉल कर दूंगा। कुछ एपीआई अब भी इस तरह के एकीकरण पर प्रतिबंध लगाते हैं जैसे कि यह एक dev.fitbit.com/docs/oauth2
मैट सी

OAuth2 का उपयोग करने वाले मूल एप्लिकेशन के लिए सर्वोत्तम अभ्यास: tools.ietf.org/html/draft-wdenniss-oauth-native-apps
मैट सी

मैं यह नहीं देख सकता कि कैसे एक ऑथथ सक्षम सेवा इस दृष्टिकोण को प्रतिबंधित कर सकती है यह undetectable और safe है ... कुछ oauth इनेबल्ड सर्विसेज़ प्लेटफ़ॉर्म विशिष्ट क्लाइंट्स को ऑथेंटिफिकेशन को आसान बनाने के लिए प्रदान करती हैं, और ऐसे क्लाइंट वास्तव में वही करते हैं जो मैंने यहाँ वर्णित किया है (एक एम्बेडेड वेबव्यू और ट्रैक url परिवर्तन दिखाएं)। आपके द्वारा जोड़ा गया सबसे अच्छा अभ्यास, एक ही चीज़ की सिफारिश करता है: सिस्टम ब्राउज़र या एम्बेडेड वेबव्यू का उपयोग करें। मेरी प्रतिक्रिया से आप किस तर्क पर हमला कर रहे हैं? यह असपष्ट है।
राडू सिमियोनेस्कु

कोई हमला नहीं, सिर्फ मुद्दे को उजागर करना। लिंक कहता है कि आपके द्वारा उल्लिखित 2 दृष्टिकोण हैं लेकिन केवल एक बाहरी उपयोगकर्ता-एजेंट को सुरक्षित माना जा सकता है, विशेष रूप से यह कहता है कि मूल एप्लिकेशन के विकल्प "एक एम्बेडेड उपयोगकर्ता-एजेंट या एक बाहरी उपयोगकर्ता-एजेंट के माध्यम से हैं। यह दस्तावेज़ बाहरी की सिफारिश करता है। इन-ऐप ब्राउज़र जैसे उपयोगकर्ता-एजेंट OAuth के लिए एकमात्र सुरक्षित और उपयोगी विकल्प के रूप में टैब करते हैं। "
मैट सी

इसके अलावा उद्धरण "एम्बेडेड वेब-एजेंटों के विशिष्ट वेब-व्यू आधारित कार्यान्वयन में, होस्ट एप्लिकेशन कर सकता है: उपयोगकर्ता नाम और पासवर्ड कैप्चर करने के लिए फॉर्म में दर्ज प्रत्येक कीस्ट्रोक को लॉग इन करें; स्वचालित रूप से फ़ॉर्म सबमिट करें और उपयोगकर्ता-सहमति को बायपास करें" ....... "एम्बेडेड उपयोगकर्ता-एजेंटों का उपयोग विश्वसनीय नहीं है, सिवाय इसके कि एक विश्वसनीय प्रथम-पक्ष ऐप अन्य एप्लिकेशन के लिए बाहरी उपयोगकर्ता-एजेंट के रूप में कार्य करता है, या कई प्रथम-पक्ष एप्लिकेशन के लिए एकल साइन-ऑन प्रदान करता है। प्राधिकरण सर्वर SHOULD कदम उठाने पर विचार करते हैं। पता लगाएँ और एम्बेडेड उपयोगकर्ता-एजेंटों के माध्यम से लॉगिन को ब्लॉक करें जो कि अपना नहीं है, जहां संभव हो। "
मैट सी।
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.