/ / ओकेटा का उपयोग करके बाकी एंडपॉइंट्स और यूआई को प्रमाणित करना - जावा, प्रमाणीकरण, वसंत-सुरक्षा, वसंत-समल, ओक्टा

ओकेटा - जावा, प्रमाणीकरण, वसंत-सुरक्षा, वसंत-सैम, ओकेटा का उपयोग कर बाकी एंडपॉइंट्स और UI को प्रमाणीकृत करना

हमारे पास एम्बेडेड जेट्टी सर्वर के साथ स्प्रिंटबूट का उपयोग करके जावा 8 बैकएंड एप्लिकेशन है।

आवेदन के लिए यूआई एक सिंगल पेज एप्लीकेशन है जो रिएक्ट का उपयोग करके बनाया गया है।

वर्तमान में मैंने प्रमाणीकरण सक्षम कर दिया हैवसंत सुरक्षा एसएएमएल एक्सटेंशन का उपयोग करके ओक्टा के साथ एकीकरण। जब मेरे ऐप के लिए ओक्टा द्वारा दावा किया जाता है, तो मैं एक सत्र बनाता हूं और JSESSIONID कुकी में भेजा जाता है।

यह अब तक ठीक था जब हमारे पास कुछ UI घटकों की सेवा करने वाला एक बहुत ही सरल UI था।

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

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

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

पढ़ने पर, ऐसा लगता है कि ओक्टा ओपनआईडी कनेक्ट हो सकता हैएक विकल्प जो एक JWT जारी करता है। हालांकि मैं इस पर स्पष्ट नहीं हूं कि इसका उपयोग कैसे किया जाए। यही है, जब ओक्टा एक जेडब्ल्यूटी जारी करता है तो हमारे यूआई या उस मामले के लिए किसी भी ग्राहक को हमारे एपीआई को प्राधिकरण हेडर में जेडब्ल्यूटी भेजते रहना चाहिए और फिर हमारे एपीआई को बदले में जेडब्ल्यूटी को ओक्टा को भेजना चाहिए?

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

उत्तर:

उत्तर № 1 के लिए 1

जब कोई क्लाइंट इन REST API को कॉल करेगा, तो मैं क्लाइंट का अनुमान लगा रहा हूं एक प्राधिकरण हेडर भेजना चाहिए जिसे किसी एक के द्वारा चेक किया जाना चाहिए प्रमाणीकरण बैकएंड में फ़िल्टर करता है

OpendID Connect (OIDC) में, प्राधिकरण हेडर में वह मान है id_token जो JWT प्रारूप में हो सकता है। इस id_token OIDC सर्वर द्वारा OIDC के लिए अंतिम चरण के रूप में जारी किया जाता है अनुदान प्रकार आप चुनते हैं और अपने मामले पर लागू होते हैं।

पढ़ने पर, ऐसा लगता है कि ओक्टा ओपनआईडी कनेक्ट हो सकता हैएक विकल्प जो एक JWT जारी करता है। हालांकि मैं इस पर स्पष्ट नहीं हूं कि इसका उपयोग कैसे किया जाए। तभी ओक्टा जारी करता है कि जेडब्ल्यूटी को हमारे यूआई या किसी भी ग्राहक को उस मामले के लिए रखना चाहिए JWT को प्राधिकरण के हेडर में भेजकर हमारे एपीआई और फिर हमारे बदले में एपीआई को मान्य करने के लिए जेडब्ल्यूटी को ओक्टा में भेजना चाहिए?

सोचें कि इसमें आपके 3 घटक हैंआर्किटेक्चर। पार्टी (क्लाइंट), पहचान सर्वर / प्राधिकरण सर्वर / ओआईडीसी प्रदाता और संसाधन सर्वर (आपका बैकएंड और यह डेटा)। जब प्राधिकरण सर्वर जारी करता है। id_token Relying Party के लिए, आपका रिसोर्स सर्वर भी इस टोकन को जानता है। इसलिए जब आप संसाधन सर्वर में डेटा के लिए अनुरोध करते हैं, तो आप अपना id_token संसाधन सर्वर को प्रस्तुत करेंगे और यह जानते हैं कि क्या यह वैध है id_token या नहीं

सवाल यह है कि दोनों के लिए सबसे अच्छा विकल्प क्या है, यूआई के लिए एक लॉगिन और एक सत्र और REST समापन बिंदुओं को प्रमाणित कर रहा है?

OIDC प्रदाता (या पहचान सर्वर यदि आपको अधिक जटिल ऑपरेशन की आवश्यकता है), क्योंकि OIDC प्राधिकरण (कोर में OAuth 2.0) और प्रमाणीकरण है।