एक स्तरित वास्तुकला में प्राधिकरण कहां फिट बैठता है?


24

आमतौर पर, मैं अपने सर्वर साइड नियंत्रकों में प्राधिकरण निर्णय लेता हूं। ये हाल ही में Restful समापन बिंदु रहे हैं, लेकिन मुझे लगता है कि MVC प्रकार के आर्किटेक्चर के लिए समान है। तर्क के लिए मान लें कि यह भूमिका आधारित प्राधिकरण है। एक संरक्षित विधि को एनोटेट किया जाएगा या जांच की जाएगी और यदि आवश्यक हो तो 403s लौटाएं।

अब, यह देखते हुए कि प्राधिकरण वास्तव में एक व्यावसायिक नियम है - "केवल प्रशासक एक्स को सूचीबद्ध कर सकते हैं" उदाहरण के लिए, मैं सोच रहा हूं कि उन्हें एक परत के नीचे धकेल दिया जाना चाहिए। जब कोई नियंत्रक व्यवसाय परत को संचालन करने के लिए कहता है, तो सेवा या व्यवसाय परत नियंत्रक को सूचित करती है कि वह अधिकृत नहीं है।

क्या यह एक उचित दृष्टिकोण है? क्या इसके नुकसान हैं?

मैं एक प्राधिकरण है कि अनिवार्य रूप से यह करने के लिए स्थिर प्रक्रियात्मक कोडित नियमों का एक गुच्छा रखती है पर घृणा कर रहा हूँ, लेकिन शायद यह एक ही स्थान पर सभी पहुँच तर्क रखने के लिए समझ में आता है। क्या यह एक क्रॉस कटिंग चिंता है जिसे अलग रखा जाना चाहिए?

इसलिए मैं पूछ रहा हूं कि क्या किसी ने ऐसा किया है और कैसे उन्होंने इसे साफ-सुथरे तरीके से हासिल किया है या अगर कोई अच्छा संसाधन है तो मैं पढ़ सकता हूं। मैं जावा fwiw का उपयोग कर रहा हूं लेकिन यह एक भाषा अज्ञेय प्रश्न है।

मैंने यहां से संबंधित प्रश्नों की जाँच की है और वे जमीन और उत्तर पर बहुत पतले हैं। उदाहरण के लिए: डोमेन मॉडल में सत्यापन और प्राधिकरण जो MVC के लिए एक सेवा परत के माध्यम से किया जाता है

मैं स्प्रिंग सिक्योरिटी डॉक्स पढ़ रहा हूं, जो इसे क्रॉस कटिंग चिंता का विषय होने के लिए कुछ अच्छे तर्क देते हैं, लेकिन मुझे चिंता है कि यह सिर्फ "स्प्रिंग तरीका" है और व्यापक दृष्टिकोण पसंद करेंगे। यह आपके एप्लिकेशन को एक विशिष्ट ढांचे से भी जोड़ता है।


1
प्राधिकरण की समस्याओं के लिए स्थिति 403 गलत है। 401. का उपयोग करें
gnasher729

@ gnasher729 मुझे लगता है कि यह पीछे की ओर है। 401 का अर्थ है प्रमाणीकरण विफल हो गया है या प्रदान नहीं किया गया है, 403 का मतलब है कि आपके पास अधिकार नहीं हैं: stackoverflow.com/questions/3297048/…
जिमीजैम

@JimmyJames, विचार का एक और स्कूल है कि आपको सभी प्रमाणीकरणों और प्राधिकरण विफलताओं के लिए उनमें से केवल एक का उपयोग करना चाहिए क्योंकि यह स्वचालित टूल को आसानी से व्यावसायिक तर्क नहीं देता है। कुछ लेवे है।
बेरिन लोरिट्श

1
@BerinLoritsch क्षमा करें, क्या आप कह रहे हैं कि यह समझना कठिन है कि क्या यह प्रमाणीकरण या प्रमाणीकरण समस्या है? RFC बहुत स्पष्ट लगता है, लेकिन यदि आप बहुत अधिक जानकारी को उजागर नहीं करना चाहते हैं, तो आप 403 के बजाय 404 का उपयोग कर सकते हैं। क्या एक संदर्भ है जिसे आप 403 के बजाय 401 का उपयोग करने के तर्क के लिए प्रदान कर सकते हैं?
जिमीजैम

@ जिमीजैम, हाँ। यह विचार प्रक्रिया सुरक्षा पेशेवरों से आती है, डेवलपर्स से नहीं। और मैंने 404 की आपकी सिफारिश को पूरी तरह से छिपाने के लिए सूचना को छिपाने के लिए भी देखा है कि संसाधन भी मौजूद है।
बेरिन लोरेट्स

जवाबों:


9

उपयोगकर्ता के लिए अधिकृत केवल विकल्पों को उजागर करने के लिए इसका अच्छा अभ्यास।

यह एक क्रॉस कटिंग चिंता का विषय है। "व्यू" को यह जानने की जरूरत है कि उपयोगकर्ता को प्रदर्शन के लिए विकल्प और मेनू बनाने से पहले क्या करने की अनुमति है।

पीछे के छोर को सुरक्षा निर्णय लेने के लिए सामने के छोर पर भरोसा नहीं करना चाहिए ताकि खुद को प्राधिकरण की जांच करनी चाहिए।

डेटा के आधार पर प्राधिकरण को प्रभावित करने वाले व्यावसायिक नियम हो सकते हैं जैसे "केवल $ 5000 से अधिक शेष वाले उपयोगकर्ता विदेशी मुद्रा हस्तांतरण को लागू कर सकते हैं" या "केवल प्रधान कार्यालय में स्थित उपयोगकर्ता ही इन खातों को देख सकता है"। तो व्यापार तर्क के भीतर कुछ प्राधिकरण तर्क की आवश्यकता है।

विचार करने के लिए तकनीकी प्राधिकरण भी हैं - जो लॉग को देखने की अनुमति देता है, जो डेटाबेस आदि का बैकअप / पुनर्स्थापन कर सकता है।

इसलिए अंत में आपके प्रत्येक घटक में कुछ विशिष्ट सुरक्षा और / या प्राधिकरण आवश्यकताएं हो सकती हैं, अभ्यास में इसकी लगभग असंभव को एक अलग "प्राधिकरण परत" में लपेटना है।


7

मुझे लगता है कि यह आपकी सेवा की परत में प्राधिकरण संलग्न करने के लिए बिल्कुल उचित दृष्टिकोण है। आपको अपनी सेवा को अनधिकृत गतिविधियों (विशेषकर डेटा-संशोधनों) को करने से बचाने की आवश्यकता है। आपकी सेवा परत एक लाइब्रेरी में रहती है, और विभिन्न प्रस्तुति परतों द्वारा उपयोग की जा रही है (आपके पास अलग-अलग यूआई-एप्लिकेशन हो सकते हैं, जो एक ही सेवा परत का उपयोग करते हैं)। और आप इस तथ्य पर भरोसा नहीं कर सकते हैं कि विशिष्ट प्रस्तुति परतें आवश्यक सत्यापन करती हैं। यह विशेष रूप से महत्वपूर्ण है यदि आप अपनी सेवा की परत को अलग प्रक्रिया (जैसे SOA दृष्टिकोण के बाद) में स्थानांतरित करने का निर्णय लेंगे।

अब इसे "साफ तरीके" से कैसे प्राप्त किया जाए। मुझे ऑथराइजेशन चेक के साथ बिजनेस लॉजिक को लिट करने का विचार पसंद नहीं है, इसलिए पहलू-उन्मुख-प्रोग्रामिंग-एप्रोच के कुछ विशिष्ट कार्यान्वयन में मदद मिल सकती है: यह विशेष विशेषताओं के साथ सेवा विधियों को सजाने या अवरोधों के साथ गतिशील परदे के पीछे का उपयोग कर सकता है।

और महत्वपूर्ण बात, मुझे यह स्वीकार करने की आवश्यकता है कि बहुत ही सरल परियोजनाओं में, आप अलग-अलग मान्यताओं के बिना रह सकते हैं, बस अपने जीवन को सरल बनाने के लिए। लेकिन यह महत्वपूर्ण है कि उस क्षण को याद न करें जब "सरल परियोजना" "जटिल परियोजना" बनने लगी।


7

मुझे प्राधिकरण जांचों को नीचे धकेलना पसंद है क्योंकि वे कम जा सकते हैं! (लेकिन आगे नहीं!)

आप अभी भी "ऊपर" परतों के खिलाफ स्वचालित प्राधिकरण परीक्षण लिखने के लिए स्वतंत्र हैं। और कुछ नियम केवल आपकी सेवा परत (CanView / CanSerialize?) जैसी उच्च परतों में लागू या लागू हो सकते हैं। लेकिन, मुझे आमतौर पर लगता है कि सबसे सुरक्षित प्राधिकरण रणनीति भी "DRY-est" रणनीति है: प्राधिकरण को यथासंभव "सामान्य" या "साझा" कोड में रखें, जैसा कि आप कर सकते हैं (जटिल नियमों को उलझाए बिना)।

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

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


@ शोहे अगर मैं आपकी चिंता को समझता हूँ - तो बात यही है। यदि केवल एक "व्यवस्थापक" के पास व्यावसायिक नियमों के अनुसार अनुमति है Widget, तो एक ही नियम हर जगह लागू होता है। (इसलिए किसी को भी अनदेखा करने का जोखिम न लें!) यदि नियम हर जगह लागू नहीं होता है, तो यह वास्तव में केवलWidgets और केवल नियम नहीं है Widgets। जहां तक ​​वे (व्यक्तिगत नियम) जा सकते हैं, तब तक नियम नीचे दबाएं; लेकिन, नहीं जहाँ तक "नियमों" जा सकते हैं ... मैं जैसे मैं भेद अच्छी तरह से बताते हुए नहीं कर रहा हूँ महसूस करते हैं। लेकिन, वहाँ अंतर माना जाता है।
20-22 बजे svidgen

मेरे अनुभव में, प्राधिकरण नियम अक्सर व्यावसायिक नियमों का हिस्सा होते हैं। जैसे, "जहाँ तक वे जा सकते हैं" अक्सर मेरी डोमेन परत होती है। लेकिन, मुझे संदेह है कि आपके नियम "कहां" गिरना आपके डोमेन का एक परिणाम है, नियमों की प्रकृति और व्यवसाय उनके बारे में कैसे बात करता है।
svidgen
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.