2015-11-25 11 views
24

मैं कुछ सेवाओं के सामने एक एपीआई गेटवे के रूप में स्प्रिंग क्लाउड के माध्यम से जुउल को पेश करना चाहता हूं।जुउल - एपी गेटवे प्रमाणीकरण

मेरे पास प्रमाणीकरण के आसपास कुछ डिज़ाइन संदेह हैं। प्रमाणीकरण स्प्रिंग सिक्योरिटी द्वारा संभाला जाएगा, जो सर्वलेट फ़िल्टर श्रृंखला में जुउल से पहले आता है।

मेरी चिंता का विषय:

  • गेटवे कई सेवाओं

  • कुछ सेवाओं के सामने बैठते हैं अंतिमबिंदुओं जो प्रमाणीकरण की आवश्यकता नहीं है बेनकाब कर सकते हैं होगा

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

एपीआई गेटवे प्रबंध के संदर्भ में:

  • आप कैसे लागू करते हैं वास्तविक सेवा टीमें नीचे की ओर सेवा प्रति आवश्यक सेटिंग प्रदान करने के लिए?
  • आप पूरे गेटवे को रोकने के बिना गेटवे (सेवा आवश्यकताओं के अनुसार) में लगातार प्रमाणीकरण सेटिंग्स में परिवर्तन की अनुमति कैसे देते हैं?

धन्यवाद, एड्रियन

उत्तर

18

हम वसंत सत्र का उपयोग कर रहे हमारी सेवाओं है कि एक Zuul एज सर्वर के पीछे बैठते हैं के सभी भर में सत्र को दोहराने के लिए। जुउल उपयोगकर्ता को प्रमाणीकृत करेगा जो उपयोगकर्ता प्रमाण-पत्रों को पॉप्युलेट करता है और सत्र में प्रमाणीकृत उपयोगकर्ता को सम्मिलित करता है। इसके बाद यह सभी सेवाओं में दोहराया जाता है और प्रत्येक सेवा अपने स्वयं के सुरक्षा नियमों और सेटिंग्स के लिए ज़िम्मेदार होती है। तो वास्तव में, सभी जुउल कर रहे हैं वसंत सुरक्षा में उपयोगकर्ता को देख रहे हैं और बैकएंड पर सेवाएं सुरक्षा नियमों को लागू कर रही हैं क्योंकि वे अपनी जरूरतों पर लागू होते हैं। इस तरह, आप स्वतंत्र रूप से गेटवे को सिर्फ एक गूंगा प्रॉक्सी बनाने के लिए प्रत्येक सेवा को बदल सकते हैं।

इसका एक अच्छा उदाहरण डेव सियर्स ट्यूटोरियल में Spring Security and an Angular JS app के बारे में है। मैंने इस से संबंधित another question भी पोस्ट किया जिसमें एक नमूना शामिल था कि हम यह कैसे कर रहे हैं जिससे मदद मिल सकती है।

+1

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

+2

जो चीज मुझे परेशान करती है वह यह है कि आप काम करने के लिए डाउनस्ट्रीम एप्लिकेशन के लिए प्रवेश द्वार के माध्यम से कॉल प्राप्त करने के लिए _have_ करते हैं। गेटवे उस गूंगा नहीं है, सत्र निर्माण अभी भी व्यावसायिक तर्क है। डेटास्टोर के माध्यम से उस सत्र को साझा करना स्नीकी उच्च युग्मन है, मुझे अभी भी समझ में नहीं आता है कि क्यों वसंत लोग इसे माइक्रोस्कोप आर्किटेक्चर में अनुशंसा करते हैं। –

+1

क्या आपके पास बेहतर समाधान @MichaelTecourt के लिए कोई सुझाव है? मुझे वास्तव में समाधान के रूप में सत्र प्रतिकृति पसंद नहीं है, लेकिन एक बेहतर तरीका नहीं मिला है। –

4
  • गेटवे कई सेवाओं

यहाँ चिंता का विषय क्या है के सामने बैठते हैं हैं?

  • कुछ सेवाओं अंतिमबिंदुओं जो प्रमाणीकरण की आवश्यकता नहीं है बेनकाब कर सकते हैं

स्प्रिंग सुरक्षा एक permitAll() पहुंच नियम

  • कुछ सेवाओं अंतिमबिंदुओं जो एक सत्र की जरूरत का पर्दाफाश हो सकता है आईडी और कुछ टोकन के साथ ", एक मनमाना अपारदर्शी मान (fo उदाहरण के लिए फ़ाइल डाउनलोड करना अगर आपको "अनुमान लगाने में कठोर" यूआरएल पता है) एपीआई गेटवे/स्प्रिंग सुरक्षा में आप सभी विशिष्ट बिंदुओं को अपने विशिष्ट प्रमाणीकरण आवश्यकताओं के साथ कॉन्फ़िगर कर सकते हैं।

आपका Zuul प्रॉक्सी सत्र हो सकता है। यदि आप स्प्रिंग सिक्योरिटी ओएथ 2.0 का उपयोग कर रहे हैं तो आप ResourceServerSecurityConfigurer#stateless(false) का उपयोग कर सकते हैं और सत्रों को बनाने के लिए HttpSecurity#sessionManagement().sessionCreationPolicy(...) के साथ सत्र सक्रिय कर सकते हैं जब भी आपको वैध पहुंच टोकन प्राप्त होता है। एक JSESSIONID कुकी HTTP प्रतिक्रिया में रखा जाएगा।

  • कैसे आप वास्तविक सेवा टीमें नीचे की ओर सेवा प्रति आवश्यक सेटिंग प्रदान करने के लिए लागू करते हैं?

मुझे यकीन है कि मैं सवाल यहाँ समझते हैं, नहीं आप एपीआई गेटवे (zuul प्रॉक्सी) के स्तर पर सुरक्षा प्रतिबंधों लागू करना चाहते हैं नहीं कर रहा हूँ? या आप प्रॉक्सी और लक्ष्य एप्लिकेशन दोनों पर "सुरक्षा डबल चेक" रखने की कोशिश कर रहे हैं?

  • आप कैसे अनुमति नहीं गेटवे में बार-बार प्रमाणीकरण सेटिंग बदल जाती है (सेवा की जरूरत के अनुसार) पूरे गेटवे को रोकने के लिए बिना?

Zuul आप जोड़ने की अनुमति देता ZuulRoute रों गतिशील रनटाइम पर, यदि आप एक स्टैंडअलोन पुस्तकालय है कि के रूप में उपयोग। वसंत सुरक्षा में लपेटा गया, जिसका संदर्भ स्टार्टअप समय पर एक बार शुरू किया गया है ... मुझे संदेह है कि आप आसानी से रनटाइम पर सुरक्षा कॉन्फ़िगरेशन को बदल सकते हैं।

संपादित टिप्पणियों में ओपी द्वारा precisions निम्नलिखित: अपनी टीमों को उनकी सुरक्षा नियमों के लिए जिम्मेदार होना चाहिए, तो एक केंद्रीकृत प्रवेश द्वार होने के डिजाइन द्वारा एक विरोधाभास है।

माइक्रोस्कोव दर्शन की मेरी व्याख्या यह है कि प्रत्येक एप्लिकेशन स्टैंडअलोन है, और इसके पूर्ण कार्यात्मक दायरे के प्रभारी, और सुरक्षा/अभिगम नियंत्रण इसका हिस्सा है। आप एप्लिकेशन स्तर पर टोकन को आसानी से सत्यापित कर सकते हैं (या तो प्राधिकरण सर्वर पर कॉल करके या जेडब्ल्यूटी का उपयोग करके), प्रत्येक एप्लिकेशन को परिभाषित करने के लिए कि प्रत्येक संसाधन के लिए कौन सा दायरा आवश्यक है। वसंत बादल में पहले से ही OAuth 2.0 starter है, या यदि आप "सादा" स्प्रिंग बूट का उपयोग करते हैं तो आप आसानी से एक बना सकते हैं।

सुरक्षा के लिए अपस्ट्रीम घटकों पर भरोसा किए बिना या अन्य टीमों के साथ अपने गेटवे कॉन्फ़िगरेशन परिनियोजन को सिंक्रनाइज़ किए बिना, जहां भी आप चाहते हैं (सार्वजनिक क्लाउड या आधार सर्वर पर) अलग-अलग ऐप्स को तैनात कर सकते हैं।

एपीआई गेटवे बात एक आसान प्रलोभन है, लेकिन जोखिम और बाधाओं को नजरअंदाज नहीं है:

  • आप आंतरिक कॉल
  • सुरक्षित करने में सक्षम आप नदी के ऊपर नेटवर्क पर निर्भर करना होगा नहीं होगा घटकों, और दी गई
  • उन्नत अभिगम नियंत्रण नियमों के लिए अपने आवेदन पत्र के इनपुट ले सिरदर्द बन सकता है: कैसे आप उपयोगकर्ता के व्यक्तिगत अनुमतियों मिलता है, आदि
  • आप अन्य टीमों
  • 012 के साथ विन्यास बदलाव सिंक्रनाइज़ करना होगा
+0

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

+0

विचार गेटवे में प्रमाणीकरण को संभालने और सेवा स्तर पर प्रधानाचार्य का उपयोग करने के लिए तैयार था और केवल सेवा-से-सेवा प्रमाणीकृत (सेवा I ट्रस्ट से अनुरोध प्राप्त हुआ था) –

+0

"सेवा I ट्रस्ट से अनुरोध प्राप्त हुआ था" आवेदन स्तर सुरक्षा के बिना सत्यापित करना असंभव है। गेटवे द्वारा आबादी वाले कुछ साझा राज्यों पर आपकी सुरक्षा पर निर्भर होने के बारे में: यह घटकों के बीच बहुत अदृश्य युग्मन और "गेटवे ने क्या किया है या नहीं" पर अपस्ट्रीम निर्भरता प्रस्तुत करता है, लेकिन यह आपकी ज़रूरत के लिए पर्याप्त समझौता हो सकता है। –

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