2017-06-12 13 views
6

ऐसे लॉगिन/पंजीकरण तर्क को लागू करने की मेरी योजना (प्रमाणीकरण कोड प्रवाह) यहां दी गई है।किसी तृतीय-पक्ष लॉगिन/रजिस्टर को लागू करने के लिए OAuth2 का उपयोग कैसे करें?

पहले एसपीए दृश्यपटल

GET https://www.example.com/oauth2 
client_id=dummyclient 
redirect_uri=https://mysite/callback 
response_type=code 
scope=openid 

तो तीसरे पक्ष के लिए एक GET अनुरोध भेजेगा कि उपयोगकर्ता के लिए उसकी/उसके openid देने के लिए सहमत (तीसरे पक्ष के केवल OAuth2 एपीआई प्रदान की गई) mysite तो fronend एक 301 HTTP प्रतिक्रिया मिलेगा।

---> 301 https://mysite/callback?code=dummycode 

बाद ब्राउज़र को mysite/callback करने के लिए पृष्ठ पर रीडायरेक्ट करेगा और यह एसपीए को फिर से लोड और यूआरएल जो एसपीए द्वारा कब्जा किया जा सकता है तो यह असली बैकएंड कॉलबैक करने के लिए कोड भेज देंगे में कोड सामने आ जाएगी।

GET https://mysite/api/real-callback?code=dummycode 

जब बैकएंड कोड प्राप्त है, यह कोड तीसरे पक्ष के लिए एक access_token विनिमय करने के लिए भेज देंगे। जब बैकएंड access_token प्राप्त करता है, तो यह उपयोगकर्ता के ओपनिड को प्राप्त करने के लिए एक एपीआई अनुरोध को फायर करेगा, फिर यह तय करेगा कि उपयोगकर्ता को लॉगिन करने या नए उपयोगकर्ता के रूप में पंजीकरण करने देना है या नहीं। अंत में यह हमारे एसपीए फ्रंटएंड पर एक HTTP प्रतिक्रिया वापस देगा जिसमें में ओएथ 2 सिस्टम या 401 अनधिकृत प्रतिक्रिया शामिल है।

तो मेरे सवाल का साबित करने के लिए कैसे है कि वास्तविक कॉलबैक मेरी खुद ग्राहकों द्वारा उत्पन्न होता है (यदि कुछ हमलावर मिल मेरी दृश्यपटल एम्बेडेड क्योंकि client_id तो वह नकली OAuth2 अनुरोध और उपयोगकर्ता फ़िशिंग सहमत होने के लिए कर सकते हैं। उसके बाद हमलावर को एक वैध कोड मिलेगा, फिर वह मेरे असली कॉलबैक पर कोड वापस भेज देगा। आखिरकार, वह मेरे सिस्टम में उपयोगकर्ता का access_token प्राप्त करेगा।) मैं अंतिम उपयोगकर्ता के पासवर्ड जैसे अतिरिक्त जानकारी प्रदान किए बिना प्रमाणीकरण करने के लिए OAuth2 का उपयोग कैसे कर सकता हूं।

+0

OAuth2 सर्वर से रीडायरेक्ट URL के रूप में 'वास्तविक-कॉलबैक' URL नहीं होने का आपका कारण क्या है? मुझे एसपीए फ्रंटएंड में ऑथ कोड प्राप्त करने का कोई कारण नहीं दिख रहा है। –

+0

@ जनहाला इस चरण के बावजूद सुरक्षा समस्या अभी भी तब तक मौजूद है जब तक कि मैं तीसरे पक्ष के ओएथ 2 कॉलबैक अनुरोध के बाद मेरे सिस्टम की 'access_token' को फ्रंटेंड पर वापस भेजूं। वास्तविक-कॉलबैक को डिज़ाइन करने का कारण यह है कि मैं फ्रंटेंड और बैकएंड के बीच असली अलगाव प्राप्त करना चाहता हूं। – bitweaver

+0

और एसपीए में आपको 'access_token' की क्या आवश्यकता है? –

उत्तर

1

मैं आपको OAuth2 प्रवाह को लागू करने के लिए सुझाव दूंगा और access_token और id_token (ओपनआईडी कनेक्ट) दोनों के लिए पूछूंगा। आपके एसपीए टोकन प्राप्त करेंगे, आपके बैकएंड पर आईडी टोकन भेजेंगे, जो यह तय करने के लिए उपयोग कर सकता है कि ऐसा उपयोगकर्ता बनाना संभव है या नहीं। एसपीए संरक्षित संसाधनों को कॉल करने के लिए एक्सेस टोकन का उपयोग कर सकता है।

इस तरह,

  • केवल एसपीए OAuth2 क्लाइंट होगा - टोकन दो आवेदन (एसपीए और बैकएंड) द्वारा उपयोग नहीं किया जाएगा,
  • आप होगा सिर्फ एक यूआरआई, रीडायरेक्ट कर
  • आपको बैकएंड से एसपीए में टोकन स्थानांतरित करने की आवश्यकता नहीं होगी।

अद्यतन: OpenID Connect ने

आप id_token उपयोग नहीं कर सकते हैं, तो आप access_token अपने बैकएंड के लिए भेज सकता है और बैकएंड आत्मनिरीक्षण endpoint https://tools.ietf.org/html/rfc7662 को टोकन के लिए भेज कर उपयोगकर्ता के उपयोगकर्ता नाम प्राप्त कर सकते हैं बिना (username विशेषता से प्रतिक्रिया)। username विशेषता वैकल्पिक है। आपका OAuth2 सर्वर और भी जानकारी लौटा सकता है (जैसे नाम और ईमेल)।

इस इंट्रोस्पेक्शन एंडपॉइंट को प्रमाणीकरण की आवश्यकता है, इसलिए इसका उपयोग करने के लिए, आपके बैकएंड को अपने client_id और एक रहस्य के साथ पंजीकृत OAuth2 क्लाइंट होना होगा।

संबंधित मुद्दे

 संबंधित मुद्दे