तृतीय पक्ष OAuth प्रदाताओं (DotNetOpenAuth का उपयोग करके) प्रमाणीकरण की अनुमति देते समय OAuth के साथ मेरे बाकी एपीआई को सुरक्षित करना


138

मेरे पास एक सीधा REST API वाला उत्पाद है ताकि उत्पाद के उपयोगकर्ता सीधे मेरे वेब उपयोगकर्ता इंटरफ़ेस का उपयोग किए बिना उत्पाद की विशेषताओं के साथ एकीकृत कर सकें।

हाल ही में मुझे विभिन्न तृतीय पक्षों से अपने डेस्कटॉप क्लाइंट को एपीआई के साथ एकीकृत करने के बारे में रुचि हो रही है ताकि मेरे उत्पाद के उपयोगकर्ताओं को उस तीसरे पक्ष के एप्लिकेशन का उपयोग करके अपने डेटा तक पहुंच प्राप्त करने की अनुमति मिल सके।

मैंने देखा है कि जो अनुप्रयोग ट्विटर द्वारा होस्ट किए गए लॉगिन पेज का उपयोग करके ट्विटर को प्रमाणित करना चाहते हैं, जो उस उपयोगकर्ता के डेटा तक पहुंचने के लिए एक विशिष्ट एप्लिकेशन अनुमति देता है। आप "अनुमति दें" या "अस्वीकार करें" बटन पर क्लिक करें और प्रमाणीकरण प्रक्रिया पूरी हो गई है। फेसबुक उसी तंत्र का उपयोग करता है जो मैं बता सकता हूं।

आगे के शोध पर, यह कार्रवाई में OAuth प्रतीत होता है, और मेरे एपीआई के रूप में देख रहा है। नेट-आधारित, मैं सोच रहा हूं कि मुझे DotNetOpenAuth का उपयोग करना चाहिए और एक समान तंत्र प्रदान करना चाहिए। दुर्भाग्य से नमूनों को बहुत कम प्रलेखित किया गया है (यदि सभी पर) और एकमात्र ट्यूटोरियल जो मैं ऑनलाइन पा सकता हूं, आपको अपने उपयोगकर्ताओं के लिए एक लॉगिन तंत्र प्रदान करने में मदद करने पर ध्यान केंद्रित किया जा सकता है ताकि वे तीसरे पक्ष के प्रदाता का उपयोग करके आपकी वेबसाइट पर लॉग इन कर सकें।

मैं वास्तव में क्या करना चाहूंगा कि मेरा REST API मेरे वेब एप्लिकेशन के लिए सभी मुख्य प्रमाणीकरण और व्यावसायिक तर्क को संभालता है और, हुड के तहत, मेरा वेब एप्लिकेशन अनिवार्य रूप से एक अन्य एप्लिकेशन है जो केवल OAuth के माध्यम से एपीआई का उपयोग करता है। उपयोगकर्ता वेबसाइट पर सीधे अपने उपयोगकर्ता नाम और पासवर्ड का उपयोग करके या MyOpenID या Facebook जैसे किसी तीसरे पक्ष के प्रदाता के माध्यम से प्रमाणित करेंगे और फिर वेबसाइट किसी तरह रीस्ट एपीआई के खिलाफ प्रमाणित करने के लिए लौटे टोकन का उपयोग करेगी।

वास्तुकला आरेख

यह मूल रूप से ऐसा लगता है कि मुझे किसी OAuth सेवा की मेजबानी करने के लिए मेरे API की आवश्यकता है, लेकिन उपयोगकर्ताओं को तृतीय पक्ष OAuth सेवा का उपयोग करने की भी आवश्यकता है। मैं मदद नहीं कर सकता, लेकिन मुझे लगता है कि मैं काफी कुछ समझ पाने के लिए OAuth पर नहीं हूं कि क्या मैं चीजों को कम कर रहा हूं या अगर मैं जो करने की कोशिश कर रहा हूं वह चीजों को करने का एक अच्छा या बुरा तरीका है।

क्या कोई मुझे मेरे द्वारा किए जाने वाले कदमों का कम से कम एक विस्तृत अवलोकन दे सकता है, या ऐसा करने के लिए मुझे क्या देखना चाहिए? या मुझे कुछ ट्यूटोरियल में इंगित करें? या मेरे प्रस्ताव को विस्फोट करके बताएं कि मैं इस (वास्तुशिल्प) के बारे में गलत हूं?


हाय नाथन, मैं एक ऐसी ही परिदृश्य के साथ संघर्ष कर रहा हूँ के रूप में आप यहाँ का वर्णन है और यदि आप कैसे मेरे मेरी एपीआई के साथ OpenID एकीकरण पर समझने की मौजूदा कमी से बचने के लिए पर मेरे सवाल या सलाह को जोड़ने के लिए कुछ भी किया था सोच रहा था stackoverflow.com/ प्रश्न / १६ Jun५५१३१ /…
जैमर

जवाबों:


123

पहले मैं प्रमाणीकरण और प्राधिकरण के बीच अंतर पर जोर देना चाहता हूं:

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

एक सेवा या एप्लिकेशन आपकी वेब साइट पर प्रमाणित नहीं होता है - कम से कम आमतौर पर नहीं। उपयोगकर्ता उपयोगकर्ता के डेटा तक पहुंचने के लिए किसी सेवा या एप्लिकेशन को अधिकृत करता है। यह आम तौर पर सेवा प्रदाता के प्राधिकरण से अनुरोध करने के बाद किया जाता है, फिर उपयोगकर्ता को सेवा प्रदाता के पास भेजा जाता है, जहां उपयोगकर्ता पहले प्रमाणित करता है (इसलिए सेवा प्रदाता जानता है कि इसकी किससे बात की जाती है) और फिर उपयोगकर्ता साइट से कहता है "हां, मेरे आवेदन [कुछ प्रतिबंधित तरीके से] तक पहुँचने के लिए यह ठीक है। तब से, एप्लिकेशन एक प्राधिकरण टोकन का उपयोग करता हैसेवा प्रदाता साइट पर उपयोगकर्ता डेटा तक पहुँचने के लिए। ध्यान दें कि एप्लिकेशन स्वयं को प्रमाणित नहीं करता है जैसे कि वह उपयोगकर्ता था, लेकिन यह उस सेवा को आश्वस्त करने के लिए किसी अन्य कोड का उपयोग करता है जो किसी विशेष उपयोगकर्ता के डेटा तक पहुंचने के लिए अधिकृत है।

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

OpenID उपयोगकर्ता प्रमाणीकरण पर केंद्रित है । OAuth आवेदन प्राधिकरण पर केंद्रित है । हालाँकि, Facebook और Twitter जैसी कुछ सेवाओं ने प्रमाणीकरण के लिए OpenID और प्रमाणीकरण के लिए OAuth का उपयोग करने के बजाय प्रमाणीकरण और प्राधिकरण के लिए OAuth का उपयोग करना चुना है ।

अब आपके अपने प्रोजेक्ट के लिए, मैं दृढ़ता से आपको वीएस गैलरी से उपलब्ध ASP.NET MVC 2 ओपनआईडी वेब साइट (C #) प्रोजेक्ट टेम्पलेट की जांच करने की सलाह देता हूं । बॉक्स से बाहर यह OpenID प्रमाणीकरण और OAuth सेवा प्रदाता समर्थन के साथ आता है । इसका अर्थ है कि आपके उपयोगकर्ता OpenID के साथ लॉग इन कर सकते हैं, और 3rd पार्टी एप्लिकेशन और सेवाएँ OAuth का उपयोग करके आपकी वेब साइट पर API कॉल कर सकते हैं और उपयोगकर्ता डेटा तक पहुंच सकते हैं।

ऐसा लगता है जैसे आप इस प्रोजेक्ट टेम्प्लेट को जोड़ना चाहते हैं, जब आप जा रहे हों, तो आपके उपयोगकर्ताओं के लिए उपयोगकर्ता नाम + पासवर्ड और साथ ही ओपनआईडी लॉग इन करने की क्षमता है। इसके अलावा, यदि आप चाहते हैं कि फेसबुक और ट्विटर आपके उपयोगकर्ताओं के लिए एक विकल्प हो, तो आपको इसे लागू करना होगा और साथ ही साथ वे OpenID मानक का उपयोग नहीं करते हैं। लेकिन DotNetOpenAuth डाउनलोड में ट्विटर और फेसबुक के साथ लॉग इन करने के लिए नमूने शामिल हैं ताकि आपको वहां कुछ मार्गदर्शन मिले।

मुझे संदेह है कि प्राधिकरण के मोर्चे पर कुछ भी करने के लिए आपके पास बहुत कुछ नहीं होगा। यह OAuth के साथ आता है जैसा कि मैंने पहले कहा था, और जो शायद आपके लिए पर्याप्त होगा।


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

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

क्या मैं OAuth के बिना REST API का उपयोग कर सकता हूं? @ और अरनोट
मणि

बेशक। बाकी सभी एपीआई को प्रमाणीकरण की आवश्यकता नहीं होती है। और ओउथ केवल एक ही तंत्र नहीं है।
एंड्रयू अरनॉट

11

सबसे पहले। प्रमाणीकरण के तरीकों से आपको मानसिक रूप से अलग होना चाहिए जो आपका एपीआई है।

आपका API मूल रूप से संसाधन है, और उन संसाधनों में हेरफेर करने के तरीके। और आपके पास एपीआई तक पहुंच प्रमाणित करने के कई तरीके हो सकते हैं।

OAuth एक ऐसा प्रमाणीकरण तंत्र है। एक OAuth प्रदाता होने के नाते महान है, भले ही विनिर्देश को पकड़ना थोड़ा कठिन है, विशेषकर उन हिस्सों को जिन्हें हस्ताक्षर के साथ करना है। एक बार आपके पास OAuth होने के बाद, क्लाइंट एप्लिकेशन में आमतौर पर एक आसान समय प्रमाणीकरण होता है, क्योंकि बहुत सारे "ओपन सोर्स, पहले से ही किए गए हैं, ज्यादातर भाषाओं में उपलब्ध लाइब्रेरी" लागू करते हैं।

OAuth के पेशेवरों और विपक्ष पर थोड़ी देर के लिए बहस हुई। लेकिन अपनी खुद की राय बनाने के लिए, मैं इस निश्चित गाइड को पढ़ने का सुझाव देता हूं , जो एरन हैमर-लाहव द्वारा लिखित है, जो OAuth विनिर्देशन के लिए जिम्मेदार लोगों में से एक है।

OAuth का एकमात्र वास्तविक विकल्प जहां तक ​​मैं इसे देखता हूं, OAuth 2.0 और सिर्फ सरल बुनियादी प्रमाणीकरण हैं।

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


क्या मैं OAuth के बिना REST API का उपयोग कर सकता हूं? @ जौन न्यूलैंडर
जेम
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.