2016-02-26 5 views
5

मैं एसएसओ के आसपास अपना सिर लपेटने की कोशिश कर रहा हूं। यह मेरी समझ है कि एसएसओ आपको एक बार लॉगिन करने और एकाधिक ऐप्स तक पहुंच प्राप्त करने की अनुमति देता है (यदि आपके पास अधिकार हैं)। तो, मैं ऐप ए में लॉग इन करता हूं। मैं एक टोकन स्थापित करता हूं। यह टोकन ऐप बी के लिए कैसे उपलब्ध हो जाता है, इसलिए मुझे एप बी में फिर से लॉगिन करने की आवश्यकता नहीं है (मान लीजिए कि उपयोगकर्ता के पास ए और बी के अधिकार हैं)? मेरे एप्स AngularJs ऐप्स हैं। मैं डेटा के लिए नेट वेबपैस का उपयोग करता हूं।एसएसओ (सिंगल साइन ऑन) कैसे काम करता है

मैं देख सकता हूं कि मैं ऐप ए में लॉगिन करता हूं और टोकन पुनर्प्राप्त करता हूं, फिर ऐप बी से टोकन पास करके ऐप ए से ऐप बी लॉन्च करता हूं। इस तरह ऐप बी में टोकन है और यह सुनिश्चित करने के लिए सर्वर को भेज सकता है कि उपयोगकर्ता के पास पहुंच है बी। हालांकि, यदि उपयोगकर्ता सीधे ब्राउज़र खोलता है और ऐप बी पर जाता है, तो मौजूदा सत्र के साथ उनका सत्र कैसे स्थापित होता है?

यदि उत्तर बैक-एंड सर्वर पर सत्र स्थिति है, तो सत्र स्थिति ऐप बी में नए उपयोगकर्ता के साथ ऐप ए में लॉग इन किए गए उपयोगकर्ता से मेल खाता है?

धन्यवाद।

+1

यह सचमुच Google में आपके शीर्षक के लिए पहली हिट है: https://auth0.com/blog/2015/09/23/what-is-and-how-does-single-sign-on-work/ – thebjorn

+0

@thebjorn मैंने पढ़ा है कि पहली बार लगभग 20 बार हिट लिंक है और मैं अभी भी समझ नहीं पा रहा हूं कि सर्वर वास्तव में क्या महसूस करता है कि ब्राउजर पहले ही लॉग इन है, शायद इसलिए कि टेक्स्ट आम जनता के लिए प्रोग्रामर नहीं है, जबकि उत्तर नीचे यह तुरंत स्पष्ट किया गया है कि यह 'एचएमटीएल 5 लोकल स्टोरेज' का धन्यवाद है कि यह सब काम करता है, लेकिन क्या इसका यह भी अर्थ है कि जेएस को एसएसओ का उपयोग करने की पूरी आवश्यकता है? –

+0

@TimoHuovinen आपको स्थानीय भंडारण/जेएस की आवश्यकता नहीं है। ऑथ/एसएसओ/लॉगिन-सर्वर सामान्य रूप से उपयोगकर्ता को लॉग करता है (सत्र/कुकीज/यहां तक ​​कि स्थानीय स्टोरेज का उपयोग करके, जब तक कि यह बता सके कि उपयोगकर्ता लॉग इन सर्वर पर अगली बार लॉग इन होता है)। जब किसी क्लाइंट-सर्वर को पृष्ठ दिखाने से पहले लॉग इन करने की आवश्यकता होती है, तो यह लॉगिन फॉर्म नहीं प्रस्तुत करता है, लेकिन लॉग इन सर्वर पर रीडायरेक्ट करता है। चूंकि लॉग इनसेवर जानता है कि उपयोगकर्ता लॉग इन है, यह संदेश भेजता है कि "यह उपयोगकर्ता 123 है", और चूंकि क्लाइंट सर्वर लॉग इनसर्वर पर भरोसा करता है, यह पासवर्ड की आवश्यकता के बिना स्थानीय रूप से उपयोगकर्ता 123 को लॉग करता है। – thebjorn

उत्तर

17

ठीक है, इसे हासिल करने के लिए निश्चित रूप से कई तरीके हैं, और यह मुश्किल हो सकता है।

विभिन्न उप डोमेन पर दो क्षुधा पर विचार करें:: मैं आपको एक उदाहरण के रूप में एक ही समाधान दे सकते हैं

The Fine Corinthian Turkey Shop (turkey.example.com) 
Rent a Baboon (monkey.example.com) 

इन दो वेब क्षुधा signon का हिस्सा है, और उनके एकल signon के लिए एक तिहाई की मेजबानी की वेबसाइट के लिए व्यवस्था करना चाहते हैं :

sso.example.com 

फिर प्रवाह है:

  1. फ्रैंक का दौरा http://turkey.example.com/orders/12
  2. तुर्की https://sso.example.com/login
  3. SSO प्रवेश फार्म के साथ उपयोगकर्ता प्रस्तुत ले जाती है, पुष्टि करता है और मुद्दों टोकन
  4. टोकन एसएसओ पर HMTL5 स्थानीय संग्रह में सहेजा गया है।
  5. उपयोगकर्ता अब एसएसओ पर मान्य है, लेकिन टोकन को वापस टोकन प्राप्त करने की आवश्यकता है।
  6. एसएसओ सर्वर पर (ग्रिड, टोकन, समाप्ति) का संयोजन संग्रहीत करता है, जहां ग्विड एक यादृच्छिक guid है और समाप्ति 30 सेकंड की तरह कुछ है।
  7. एसएसओ * .example.com Guid
  8. एसएसओ युक्त पर एक सुरक्षित कुकी सेट वापस http://turkey.example.com/orders/12 पर रीडायरेक्ट
  9. तुर्की अब कुकी
  10. तुर्की SSO सर्वर कॉल करता है और के लिए टिकट केंद्र से टिकट प्राप्त कर सकते हैं टोकन।
  11. तुर्की भंडार ब्राउज़र में टोकन

अब कल्पना करो कि फ्रैंक कि टर्की साथ जाने के लिए कुछ अच्छा रसदार बबून्स चाहता है:

  1. फ्रैंक का दौरा: http://monkey.example.com/order-in-bulk
  2. बंदर देखता फ्रैंक नहीं है संग्रहीत टोकन और रीडायरेक्ट https://sso.example.com/login
  3. एसएसओ देखता है कि फ्रैंक पहले ही लॉग इन है क्योंकि उसके पास स्थानीय स्टोरेज
  4. में संग्रहीत टोकन है 10
  5. एसएसओ भंडार एक नया (Guid, टोकन, समाप्ति) सर्वर पर ट्रिपल
  6. प्रक्रिया, बाकी का रास्ता
+0

रंगीन उदाहरण के लिए धन्यवाद। यह सहायक है। तो, एसएसओ देखता है कि फ्रैंक पहले ही लॉग इन है क्योंकि उसके पास एक संग्रहित टोकन है (उपरोक्त बाबून से # 3)। यह वह टुकड़ा है जो मुझे पहेली करता है। एसएसओ कैसे देखता है कि फ्रैंक पहले ही लॉग इन है? बंदर तुर्की से टोकन का कोई ज्ञान नहीं है। एसएसओ यह जानने के लिए क्या उपयोग करता है कि बंदर से अनुरोध फ्रैंक से है? –

+0

जब उपयोगकर्ता एसएसओ में साइन इन करता है, रीफ्रेश/एक्सेस टोकन स्थानीय स्टोरेज में संग्रहीत होते हैं। यह एसएसओ के बाद की यात्राओं के लिए उपलब्ध होगा। –

+0

"फ्रैंक चाहता है कि कुछ अच्छे रसदार गुब्बारे उस तुर्की के साथ जाएं" - फ्रैंक को याद रखना चाहिए कि वह केवल उन्हें किराए पर ले रहा है :) – iandayman

1

हालांकि प्रारंभिक लॉगिन के समान है, तो उपयोगकर्ता को किसी ब्राउज़र को खोलता है और चला जाता है ऐप बी के लिए, फिर क्या उनके सत्र मौजूदा टोकन के साथ स्थापित हो जाता है?

यदि उत्तर बैक-एंड सर्वर पर सत्र स्थिति है, तो ऐप बी में नए अनुरोध के साथ ऐप ए में लॉग इन किए गए उपयोगकर्ता से सत्र राज्य कैसे मेल खाता है?

मैं कहूंगा कि कुकीज़ और रीडायरेक्ट्स के बारे में यह टोकन की तुलना में अधिक है। उपयोगकर्ता की पहचान स्थापित होने के बाद टोकन उत्पन्न होते हैं।

तो जब आप अपने ब्राउज़र के माध्यम से ऐप बी हिट करते हैं, तो ऐप बी आपके उपयोगकर्ता-एजेंट को ऑथ सर्वर पर रीडायरेक्ट करता है (जो बदले में आपको एक एसएसओ साइट पर रीडायरेक्ट कर सकता है)।

ध्यान देने योग्य बात यह है कि एसएसओ लॉगिन अनुरोध वास्तव में आपके ब्राउज़र और एसएसओ सर्वर के बीच एक HTTP अनुरोध है।

तो एसएसओ कुकी पहले से ही वहां है - क्योंकि पहले, ऐप ए ने आपके उपयोगकर्ता-एजेंट को ऑथ/एसएसओ सर्वर पर रीडायरेक्ट किया होगा जहां लॉगिन किया गया था। एसएसओ सर्वर तब आपके और उसके बीच एक कुकी बना सकता है।

अगर मैं अनुप्रयोग एक के लिए लॉग इन और पुनः प्राप्त एक टोकन तो अनुप्रयोग एक ओर से एप्लिकेशन बी लांच अनुप्रयोग बी को टोकन पास करके

मुझे यकीन है कि मैं अनुप्रयोग के बारे में समझ में नहीं कर रहा हूँ मैं देख सकता हूँ एप बी के लिए अपना टोकन पास करना आम तौर पर एप्स (ओथ 2.0 क्लाइंट) टोकन साझा नहीं करेगा। अनुप्रयोग बी प्रमाणीकरण सर्वर के लिए अपने स्वयं के अनुरोध करता है जो (यदि उपयोगकर्ता प्रवेश हो) लॉगिन भाग को छोड़ सकते हैं, लेकिन फिर कि सत्यापित करने की आवश्यकता होगा:

  1. अनुप्रयोग बी कार्यक्षेत्रों का अनुरोध करने के लिए और कहा कि अधिकार है

  2. साइन-इन किए गए उपयोगकर्ता ने उन क्षेत्रों तक पहुंच प्रदान की है।

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

यह मानते हुए कि आप लागू अनुदान प्रवाह का उपयोग करते हैं (मैंने देखा है कि आपके ऐप्स में से एक एंजुलरजेस ऐप है)।

यदि आप कोड, पासवर्ड या क्लाइंट-प्रमाण-पत्र Oauth2.0 अनुदान का उपयोग करते हैं तो प्रारंभिक उपयोगकर्ता लॉगिन और सहमति के बाद आपको रीफ्रेश टोकन प्राप्त हो सकता है।

रीफ्रेश टोकन लॉगिन के लिए फिर से आवश्यकता के बिना लंबी अवधि की पहुंच (केवल उस ऐप के लिए) के बराबर है और अंत उपयोगकर्ता से एक से अधिक बार सहमति के बिना।

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