MongoDB
 sql >> डेटाबेस >  >> NoSQL >> MongoDB

MERN स्टैक जैसे वेब और एपीआई समाधान को प्रमाणित और अधिकृत करने का सबसे अच्छा तरीका क्या है?

सबसे अच्छी प्राधिकरण रणनीति आपके आवेदनों के छोटे या लंबे समय के दायरे पर निर्भर करती है।

निजी लॉगिन के साथ मोनोलिथिक या साधारण वेब

उदाहरण के लिए, यदि आपके पास एक साधारण बैकएंड (एपीआई रेस्ट) या इस तरह के एक मोनोलिथिक एप्लिकेशन के साथ एक साधारण (एमईआरएन) वेब होगा मर्न उदाहरण आपके संगठन में आंतरिक या निजी लॉगिन के साथ, आपकी प्राधिकरण रणनीति उतनी ही सरल हो सकती है:

  • (1*) /लॉगिन एक्सप्रेस रूट जो उपयोगकर्ता/पासवर्ड प्राप्त करता है, उन्हें डेटाबेस में मान्य करता है और क्लासिक जेडब्ल्यूटी टोकन और विकल्पों की एक सरणी (प्रतिक्रिया मार्ग) देता है, जिस पर उपयोगकर्ता की पहुंच होनी चाहिए
  • वेब ऐप (प्रतिक्रिया) को उन पृष्ठों को प्रस्तुत करना होगा जिनके मार्ग प्राप्त मार्गों से मेल खाते हैं
  • वेब ऐप को प्राप्त टोकन को किसी भी एपीआई रेस्ट एंडपॉइंट आमंत्रण पर भेजना होगा
  • जब एपीआई प्रतिक्रिया वेब से आमंत्रण प्राप्त करता है, तो उसे शीर्षलेख के रूप में टोकन के अस्तित्व को सत्यापित करना होगा। यदि मौजूद नहीं है, तो 403 त्रुटि लौटानी होगी।
  • (2*) यदि टोकन मौजूद है, तो उसे सत्यापित करने का प्रयास करना चाहिए (अच्छी तरह से गठित, समाप्त नहीं हुआ, सही हस्ताक्षर, आदि)।
  • (3*)यदि यह एक वैध टोकन है, तो आपको अंतिम सत्यापन करना होगा:क्या "अतिथि" भूमिका वाले उपयोगकर्ता को DELETE निष्पादित करने की अनुमति है एक समापन बिंदु पर /user/100
  • (4*) क्लासिक समाधान यह है कि आपके डेटाबेस में कुछ टेबल हों जैसे:उपयोगकर्ता, भूमिकाएं, उपयोगकर्ता_रोल, भूमिका_अनुमति, अनुमति_विकल्प। विकल्प तालिका में आपके सभी एपीआई एंडपॉइंट और इसकी विधि पंजीकृत होनी चाहिए। इसके अलावा इसका उपयोग उपयोगकर्ता <:> वेब मार्गों के बीच संबंध बनाने के लिए किया जा सकता है। इसे जांचें

आधुनिक आवश्यकताएं

आधुनिक और बड़े संगठनों की आवश्यकता है:

  • सामाजिक नेटवर्क लॉगिन
  • आंतरिक/बाहरी उपयोगकर्ता
  • सहभागी लॉगिन नहीं (रोबोट, शेड्यूलर, आदि)
  • कई वेब ऐप्स
  • कई मोबाइल ऐप्स
  • बहुत सारे एपी रेस्ट

इस मामले में, MERN ऐप एक अच्छा विकल्प नहीं है क्योंकि यह ऑल-इन-वन है। पिछली आवश्यकताओं को लागू करने की सामान्य रणनीति कई सर्वरों में कई कलाकृतियों को तैनात करना है:

  • वेब ऐप (प्रतिक्रिया, vue, कोणीय, लिंकस्टार्ट, आदि)
  • एपिस रेस्ट (नोडज + एक्सप्रेस, जावा, पायथन, आदि)
  • प्रमाणीकरण/प्राधिकरण:oauth2 प्लेटफॉर्म/प्रदाता, पहचान/पहुंच प्लेटफॉर्म, आदि

यदि यह आपका मामला है, तो आपको अपने MERN ऐप को कई परिनियोजन योग्य कलाकृतियों में विभाजित करना होगा:वेब, एपीआई और सुरक्षा।

Oauth2

कोई फर्क नहीं पड़ता कि आप केवल लॉगिन के लिए चिंतित हैं या अपने वेब, एपिस और शायद आपके मोबाइल ऐप के लिए प्रमाणीकरण और प्राधिकरण कैसे सुनिश्चित करते हैं, आपको इसकी आवश्यकता होगी:OAUTH2

आप (1*), (2*), (3*) y (4*) को ध्यान में रखते हुए अपना खुद का सुरक्षा मंच विकसित कर सकते हैं या कुछ इस तरह का उपयोग कर सकते हैं:

  • auth0
  • कीक्लॉक, वगैरह

अधिक विवरण यहां:https://stackoverflow.com/a/62049409

आपके प्रश्न

  • आपको कौन सा तरीका बेहतर लगता है?
    • मुझे लगता है कि यदि आप auth0 का उपयोग करेंगे, तो आप समय और प्रयास की बचत करेंगे। auth0 के साथ आपको बस एक साधारण एक्सप्रेस ऐप की आवश्यकता होती है, जिसमें कुछ एंडपॉइंट जैसे /login, /callback आदि होते हैं।
    • मैं आपको सलाह देता हूं, पासपोर्ट के साथ/बिना auth0 का उपयोग करने से पहले समीक्षा करें कि OAUTH2 प्रवाह कैसे काम करता है। यह लिंक मेरी बहुत मदद की।
  • 2 और 3 में क्या अंतर है,
    • जैसा कि मैंने पढ़ा, auth0 और अन्य प्लेटफॉर्म उपयोगकर्ता प्रबंधन सेवा प्रदान करते हैं या यह आपकी उपयोगकर्ता सेवा (एडी/एलडीएपी, डेटाबेस, एपीआई, आदि) से जुड़ सकता है। तो
  • पासपोर्ट में नियमों को लागू करने का कोई तरीका है (उदाहरण के लिए पहले लॉगिन पर नए उपयोगकर्ताओं को पुनर्निर्देशित करें)
    • हाँ। पासपोर्ट के साथ या उसके बिना आपके नोडज में कॉलबैक रीडायरेक्ट होने पर आप कुछ तर्क जोड़ सकते हैं।
  • यदि मैं MongoDB के साथ पासपोर्ट लागू करता हूं, और मेरे डेटाबेस में सैकड़ों उपयोगकर्ता हैं, तो मैं उन्हें कैसे प्रबंधित कर सकता हूं?
    • आजकल डेटाबेस बहुत सारी पंक्तियों का समर्थन करता है। तो अपने उत्पादन डेटाबेस के लिए इसे अनुकूलित या मॉनिटर करने का प्रयास करें। एक अन्य विकल्प इन कार्यों को करने के लिए एक डेटाबेस व्यवस्थापक को नियुक्त करना है।

संदर्भ




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. नेवला के साथ वर्तमान के अगले और पिछले आइटम को कैसे प्राप्त करें?

  2. बाध्यकारी गतिशील सर्वर प्रतिक्रिया (नेस्टेड जेसन)

  3. क्या MongoDB के $in खंड में तर्कों की संख्या में कोई अधिकतम सीमा है

  4. मोंगोडीबी बैच जावा ड्राइवर के साथ काम नहीं कर रहा है

  5. MongoDB 3.6.3 में ReadConcernMajority को कैसे सक्षम करें?