Json Web Token
प्रमाणीकरण के लिए JWT ( ) का उपयोग करने के बारे में वेब पर बहुत सारी जानकारी है। लेकिन मुझे अभी भी स्पष्ट विवरण नहीं मिला कि एक मल्टीपल डोमेन एनवायरनमेंट में सिंगल साइन-ऑन सॉल्यूशन के लिए JWT टोकन का उपयोग करते समय प्रवाह क्या होना चाहिए ।
मैं एक ऐसी कंपनी के लिए काम करता हूं जिसमें विभिन्न होस्ट पर बहुत सारी साइटें हैं। चलो example1.com और example2.com का उपयोग करते हैं । हमें एक एकल साइन-ऑन समाधान की आवश्यकता है, जिसका अर्थ है कि यदि कोई उपयोगकर्ता example1.com पर प्रमाणित करता है , तो हम चाहते हैं कि वह भी example2.com पर स्वतः प्रमाणित हो जाए।
OpenId कनेक्ट प्रवाह का उपयोग करते हुए , मैं समझता हूं कि जो उपयोगकर्ता example1.com पर प्रमाणित करना चाहता है, उसे पहले प्रमाणीकरण सर्वर (या OP
: "OpenId प्रदाता") पर पुनर्निर्देशित किया जाएगा । उपयोगकर्ता उस सर्वर पर प्रमाणित करता है, जो तब उसे हस्ताक्षरित JWT टोकन के साथ मूल example1.com साइट पर वापस भेज देता है । (मुझे लगता है कि एक और प्रवाह है जो एक मध्यवर्ती टोकन लौटाता है जिसे स्वयं वास्तविक JWT टोकन के लिए बाद में एक्सचेंज किया जा सकता है, लेकिन मुझे नहीं लगता कि यह हमारे लिए आवश्यक है) ...
तो अब उपयोगकर्ता example1.com पर वापस आ गया है और प्रमाणित है! वह अनुरोध कर सकता है, Authentication
हेडर में जेडब्ल्यूटी टोकन पास कर सकता है और सर्वर हस्ताक्षरित जेडब्ल्यूटी को सत्यापित करने में सक्षम है और इसलिए उपयोगकर्ता की पहचान करने में सक्षम है। अच्छा!
पहला प्रश्न :
क्लाइंट पर JWT टोकन कैसे संग्रहीत किया जाना चाहिए? इस बारे में फिर से बहुत सारी जानकारी है, और लोग इस बात से सहमत दिख रहे हैं कि इसका उपयोग Web Storage
करना अच्छे पुराने के बजाय जाने का तरीका है cookies
। हम चाहते हैं कि JWT ब्राउज़र रिस्टार्ट के बीच लगातार बना रहे ताकि हम उपयोग करें Local Storage
, न कि Session Storage
...
अब उपयोगकर्ता अपने ब्राउज़र को फिर से शुरू कर सकता है और वह अभी भी example1.com पर प्रमाणित होगा , जब तक कि JWT टोकन समाप्त नहीं होता है!
इसके अलावा, अगर example1.com को हमारे किसी अन्य डोमेन के लिए अजाक्स अनुरोध करने की आवश्यकता है , तो मुझे समझ में आता है कि CORS को कॉन्फ़िगर करने की अनुमति होगी। लेकिन हमारा मुख्य उपयोग मामला क्रॉस-डोमेन अनुरोध नहीं है, यह एकल साइन-ऑन समाधान है !
इसलिए, मुख्य सवाल:
अब, प्रवाह क्या होना चाहिए, अगर उपयोगकर्ता example2.com पर जाता है और हम चाहते हैं कि उसे जेडब्ल्यूटी टोकन का उपयोग करके पहले से ही प्रमाणित किया जाए? Local Storage
लगता है कि इस बिंदु पर क्रॉस-डोमेन का उपयोग करने की अनुमति नहीं है इसलिए ब्राउज़र उदाहरण के लिए अनुरोध करने के लिए JWT टोकन नहीं पढ़ सकता है ।
चाहिए:
- उपयोगकर्ता को फिर से प्रमाणीकरण सर्वर पर भेज दिया जाएगा? जब उपयोगकर्ता example1.com के लिए प्रमाणित होता है , तो प्रमाणीकरण सर्वर ने उपयोगकर्ता पर एक कुकी सेट की हो सकती है, इसलिए example2.com के लिए यह नया प्रमाणीकरण अनुरोध उस कुकी का उपयोग कर सकता है यह देखने के लिए कि उपयोगकर्ता पहले से ही प्रमाणित है और तुरंत उसे वापस example2.com पर रीडायरेक्ट करता है उसी JWT टोकन के साथ?
- या, example2.com पर ब्राउज़र, JWT टोकन को फिर से प्रमाणीकरण सर्वर पर जाने के बिना एक्सेस कर सकता है ? मैं देखता हूं कि क्रॉस-स्टोरेज समाधान हैं , लेकिन क्या वे व्यापक रूप से उपयोग किए जाते हैं? क्या वे क्रॉस डोमेन SSO पर्यावरण के लिए सुझाए गए समाधान हैं?
हम कुछ भी नहीं चाहते फैंसी, हम ज्यादातर इस्तेमाल समाधान के साथ खुश होंगे!