माइक्रोसिस्टवर्क प्रमाणीकरण रणनीति


138

मैं एक कठिन समय एक microservice वास्तुकला के लिए एक सभ्य / सुरक्षित प्रमाणीकरण रणनीति का चयन कर रहा हूँ। इस विषय पर मुझे जो एकमात्र SO पोस्ट मिली, वह यह है: माइक्रोसैस आर्किटेक्चर में सिंगल साइन-ऑन

यहाँ मेरा विचार प्रत्येक सेवा में है (उदाहरण के लिए प्रमाणीकरण, संदेश, सूचना, प्रोफ़ाइल आदि) प्रत्येक उपयोगकर्ता के लिए एक अनूठा संदर्भ (तार्किक रूप से तब उसका user_id) और वर्तमान उपयोगकर्ता के idलॉग इन होने की संभावना है।

मेरे शोध से, मुझे लगता है कि दो संभावित रणनीतियाँ हैं:

1. साझा वास्तुकला

साझा वास्तुकला

इस रणनीति में, प्रमाणीकरण ऐप अन्य के बीच एक सेवा है। लेकिन प्रत्येक सेवा को रूपांतरण बनाने में सक्षम होना चाहिए session_id=> user_idइसलिए यह मृत सरल होना चाहिए। यही कारण है कि मैंने रेडिस के बारे में सोचा, जो कुंजी: मूल्य को संग्रहीत करेगा session_id:user_id

2. फ़ायरवॉल वास्तुकला

फ़ायरवॉल वास्तुकला

इस रणनीति में, सत्र भंडारण वास्तव में मायने नहीं रखता है, क्योंकि यह केवल प्रमाणीकरण ऐप द्वारा नियंत्रित किया जाता है। फिर user_idअन्य सेवाओं के लिए अग्रेषित किया जा सकता है। मैंने रेल्स + डेविस (+ रेडिस या मेम-कैश्ड, या कुकी स्टोरेज, इत्यादि) के बारे में सोचा लेकिन इसमें संभावनाएँ हैं। केवल एक चीज यह है कि सेवा X को उपयोगकर्ता को प्रमाणित करने की आवश्यकता नहीं होगी।


उन दो समाधानों की तुलना में कैसे करें:

  • सुरक्षा
  • मजबूती
  • scalability
  • उपयोग में आसानी

या शायद आप एक और समाधान सुझाएंगे जिसका मैंने यहां उल्लेख नहीं किया है?

मुझे समाधान # 1 बेहतर लगता है, लेकिन इतना डिफ़ॉल्ट कार्यान्वयन नहीं मिला है जो मुझे इस तथ्य में सुरक्षित कर दे कि मैं सही दिशा में जा रहा हूं।

मुझे आशा है कि मेरा प्रश्न बंद नहीं होगा। मैं वास्तव में नहीं जानता कि इसे और कहां से पूछना है।

अग्रिम में धन्यवाद


1
क्या आप कृपया प्राप्त करने के लिए क्या कर रहे हैं, इस बारे में अधिक जानकारी के लिए कृपया पुष्टि करें। पहले मामले में प्रमाणीकरण रेडिस के खिलाफ होता है, या स्वयं सेवाओं में होता है? दूसरे चित्र में रेडिस गायब है, क्या यह जानबूझकर है?
प्लामेन पेट्रोव

मैंने कुछ जानकारी जोड़ी है। कृपया मुझे बताएं कि यह अभी भी स्पष्ट नहीं है। धन्यवाद!
ऑगस्टिन रीडिंजर

क्या आप एक microservice बनाने के विचार के बारे में सोच रहे हैं जो OAuth प्रोटोकॉल का उपयोग करते हैं और आपकी अन्य सेवा टोकन का उपयोग करती है?
तियार बली

मैं इस समाधान के बारे में उत्सुक हूं, लेकिन मुझे अभी भी समझ में नहीं आया कि यह व्यवहार में कैसे काम करेगा। क्या आप जानते हैं कि मुझे इसके कुछ मानक कार्यान्वयन कहां मिल सकते हैं?
ऑगस्टिन रीडिंजर

@AugustinRiedinger, इसे डालने के लिए धन्यवाद। मैं अपने मोनोलिथिक वेब एप्लिकेशन को भी बेबी स्टेप्स द्वारा माइक्रो सेवाओं में तोड़ रहा हूं। आपके मामले में, सेवाएँ 1-एन स्टेटलेस या राज्य-पूर्ण हैं। यदि वे राज्य-पूर्ण हैं, तो क्या आपने इनमें से प्रत्येक सेवा में सत्र के प्रबंधन के बारे में सोचा है। धन्यवाद
मनचंदा। P

जवाबों:


61

जो मैं समझता हूं उसके आधार पर, OAuth 2 प्रोटोकॉल का उपयोग करके इसे हल करने का एक अच्छा तरीका है (आप इसके बारे में http://oauth.net/2/ पर थोड़ी अधिक जानकारी प्राप्त कर सकते हैं )

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

OAuth 2 मॉडल

जंजीर माइक्रोसैके डिजाइन का उदाहरण आर्किटेक्चर मॉडल

संसाधन:


1
धन्यवाद यह बहुत स्पष्ट है। मुझे यह एक बहुत अच्छा लेख मिला, जिसमें बहुत ही समान समाधान शामिल हैं: dejanglozic.com/2014/10/07/…
Augustin Riedinger

16
आपका उत्तर बहुत अच्छा है, लेकिन एपीआई गेटवे (इसके अंदर या किसी AuthMicroService में) से उत्पन्न टोकन कैसे हो सकता है, एक यादृच्छिक microservice द्वारा हैंडल किया जा सकता है, जिसका उद्देश्य प्रमाणित करना नहीं है, और संभवत: इसके अंदर oauth प्रबंधन नहीं है उसका व्यवसाय कोड?
mfrachet

उदाहरण के लिए, आप नेटफ्लिक्स ज़ूल का उपयोग सभी सेवाओं के लिए प्रवेश द्वार में प्राप्त टोकन भेजने के लिए कर सकते हैं और वे उपयोगकर्ता जानकारी को जान पाएंगे। docs.spring.io/spring-boot/docs/current/reference/htmlsingle/…
Tiarê Balbi

सेवाओं के बीच OAuth2 का उपयोग करने के बारे में एक और अच्छी बात यह है कि आप एंडपॉइंट हो सकते हैं जो सेवा प्रमाणित और उपयोगकर्ता प्रमाणित कार्यों के बीच अंतर करते हैं।
cmp

2
OAuth किसी अन्य सिस्टम में उपयोगकर्ता के डेटा को सिस्टम एक्सेस देने के बारे में अधिक है। यह मेरे लिए SAML के लिए एक अच्छा मामला है।
रोब ग्रांट

8

संक्षिप्त उत्तर: Oauth2.0 तरह के टोकन आधारित प्रमाणीकरण का उपयोग करें, जिसका उपयोग किसी भी प्रकार के एप्लिकेशन जैसे वेबैप या मोबाइल ऐप में किया जा सकता है। एक वेब अनुप्रयोग के लिए शामिल चरणों का अनुक्रम तब होगा

  1. आईडी प्रदाता के खिलाफ प्रमाणित
  2. कुकी में एक्सेस टोकन रखें
  3. वेबप में पृष्ठों तक पहुँचें
  4. सेवाओं को बुलाओ

नीचे दिए गए चित्र में उन घटकों को दर्शाया गया है जिनकी आवश्यकता होगी। वेब और डेटा एपिस को अलग करने वाला ऐसा आर्किटेक्चर एक अच्छा मापनीयता, लचीलापन और स्थिरता देगा

यहाँ छवि विवरण दर्ज करें


क्या एडब्ल्यूएस लैंबडा "ठंडा" नहीं बन जाता है और शुरू होने में समय लगता है? यह लॉगिन धीमा कर देगा, है ना?
17

@tsuz, AWS ने अब लैम्बडा में कॉन्सेप्ट सुविधा शुरू की है, जहाँ आप कॉन्सिक्वेंसी को आरक्षित कर सकते हैं। इससे आप कोल्ड स्टार्ट की समस्या को ठीक कर सकते हैं। docs.aws.amazon.com/lambda/latest/dg/…
संदीप नायर

मैं इस उत्तर को सालों पहले देखना पसंद करूंगा, यह अविश्वसनीय रूप से बस यह समझने के लिए है कि कैसे प्रमाणीकरण और प्राधिकरण के साथ microservices वास्तुकला स्वतंत्र microservices अन्य सेवाओं का उपयोग करने के लिए orchestated किया जा सकता है
brayancastrop

@ संदीप, मुझे लगता है कि आप प्रोविजनल कंसीडर का जिक्र कर रहे हैं और आरक्षित नहीं हैं।
अनिल कुमार

0

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

एपीआई गेटवे सभी प्रकार के क्लाइंट ऐप जैसे पब्लिक जावा स्क्रिप्ट क्लाइंट ऐप, पारंपरिक वेब ऐप, देशी मोबाइल ऐप और माइक्रोसेवा आर्किटेक्चर में तीसरे पक्ष के क्लाइंट ऐप के लिए एकल प्रविष्टि बिंदु के रूप में कार्य करता है।

आप इसके बारे में अधिक जानकारी http://proficientblog.com/microservices-security/ पर प्राप्त कर सकते हैं


-2

आप प्रमाणीकरण और प्राधिकरण के उद्देश्य के लिए अज्ञात सर्वर 4 का उपयोग कर सकते हैं

आपको फ़ायरवॉल आर्किटेक्चर का उपयोग करना चाहिए इसलिए आपके पास secutiry, मजबूती, स्केलेबिलिटी और उपयोग में आसानी पर अधिक नियंत्रण है

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.