2009-12-01 18 views
5

मैं प्राधिकृत एट्रिब्यूट का उपयोग करना चाहता हूं ताकि यह नियंत्रित किया जा सके कि किन उपयोगकर्ताओं को मेरे कार्यों तक पहुंच की अनुमति है। मैं सिर्फ यह स्पष्ट करना चाहता हूं कि मेरा तर्क क्रम में है।एएसपी.NET एमवीसी सदस्यता

  1. मुझे लगता है मैं एक सुरक्षा नियंत्रक के एक लॉगिन कार्रवाई के लिए एक उपयोगकर्ता की साख पोस्ट IPrincipal
  2. के अपने खुद के कार्यान्वयन पैदा करते हैं।
  3. मैं एक UserService वर्ग के साथ क्रेडेंशियल्स को सत्यापित और IPrincipal HttpContext.User
  4. मेरे WebAuthorizeAttribute, जो AuthorizeAttribute इनहेरिट करती है, वर्तमान की जाँच करता है करने के लिए अपने UserService वर्ग से लौटे आवंटित HttpContext.User.Identity.IsAuthenticated और HttpContext.User.IsInRole यह निर्धारित करने के लिए कि उपयोगकर्ता को कार्रवाई तक पहुंच है या नहीं।

चीजों का सामान्य प्रवाह है? मुझे पता है कि मैं सदस्यता प्रदाता का उत्तराधिकारी हो सकता हूं, लेकिन मुझे वहां की सभी कार्यक्षमताओं की आवश्यकता नहीं है, वास्तव में केवल दो अलग-अलग भूमिकाओं के साथ लॉगिन करने की क्षमता है।

उत्तर

4

आपको कहीं भी आईप्रिन प्रिंसिपल स्टोर करना होगा और हर अनुरोध के साथ इसे पुनर्स्थापित करना होगा। कई अन्य StackOverflow सवाल :)

में

Where to store logged user information on ASP.NET MVC using Forms Authentication?

और propably:

ASP.NET 2.0 Forms authentication - Keeping it customized yet simple

आप यहाँ अन्य समाधान पा सकते हैं: आप FormsAuthentication का उपयोग करेंगे, तो यह अच्छा समाधान है EDIT

के बारे में MyBusinessLayerSecurityClass.CreatePrincipal (आईडी, id.Name):

आप इस पृष्ठ को पढ़ना चाहिए:

http://msdn.microsoft.com/en-us/library/aa480476.aspx

विशेष रूप से इस:

FormsAuthenticationModule वर्ग एक निर्माण करती है जेनेरिक प्रिंसिपल ऑब्जेक्ट और सेंट यह HTTP संदर्भ में है। GenericPrincipal वस्तु एक FormsIdentity उदाहरण है कि वर्तमान में प्रमाणीकृत उपयोगकर्ता का प्रतिनिधित्व करता है के लिए एक संदर्भ रखती है। आपको आपके लिए इन कार्यों को प्रबंधित करने के लिए प्रमाणीकरण फ़ॉर्म की अनुमति देनी चाहिए। इस तरह के के रूप में अपने आवेदन पत्र विशिष्ट आवश्यकताएं हैं , एक कस्टम वर्ग के लिए उपयोगकर्ता संपत्ति की स्थापना कि IPrincipal इंटरफ़ेस लागू करता है, तो आपके आवेदन PostAuthenticate घटना संभाल चाहिए। PostAuthenticate घटना होती है FormsAuthenticationModule के बाद रूपों प्रमाणीकरण कुकी सत्यापित और GenericPrincipal और FormsIdentity वस्तुओं बनाया गया है। इस कोड के भीतर, आप एक कस्टम IPrincipal वस्तु कि FormsIdentity वस्तु, लपेटता और फिर HttpContext में संग्रहीत निर्माण कर सकते हैं। उपयोगकर्ता संपत्ति।

फॉर्म प्रमाणीकरण कुकी सेट करने के बाद फॉर्म स्वचालितता स्वचालित रूप से प्रबंधित की जाती है। आपको बस इतना करना है कि इसे अपने आईप्रिनिपल में लपेटें। यह सब तब होता है जब HttpContext.Current.User प्रॉपर्टी शून्य नहीं है (यह जेनेरिक प्रिंसिपल है, जिसे आप जल्द ही बाद में बदलते हैं)। जब HttpContext.Current.User शून्य है तो पहले कोई प्रमाणीकरण कुकी नहीं बनाई गई थी और उपयोगकर्ता प्रमाणीकृत नहीं है।

+0

मैंने बहुत से प्रश्न और ब्लॉग ब्लॉग पढ़े हैं लेकिन कोई भी वास्तव में इस पूरे हिस्से को संदर्भ में नहीं डालता है। – scottm

+0

क्या आप MyBusinessLayerSecurityClass.CreatePrincipal (id, id.Name) भाग को समझा सकते हैं। अगर आपको HttpContext.Current.User प्रॉपर्टी शून्य है, तो मुझे समझ में नहीं आता कि आपको फॉर्म इडेंटिटी कैसे मिलती है। – scottm

2

मेरा मानना ​​है कि निम्न और अधिक विशिष्ट है:

  1. मैं IPrincipal
  2. के अपने खुद के कार्यान्वयन के मैं एक सुरक्षा नियंत्रक के एक लॉगिन कार्रवाई के लिए एक उपयोगकर्ता की साख पोस्ट।
  3. मैं उपयोगकर्ता सेवा वर्ग के साथ प्रमाण-पत्र मान्य करता हूं और ऐसी कुकी का निर्माण करता है जिसमें इस उपयोगकर्ता के लिए कुछ पहचान जानकारी है। आम तौर पर फॉर्म प्रमाणीकरण। SetAuthCookie या उस वर्ग की उपयोगिता विधियों के कुछ संयोजन का उपयोग किया जाता है।
  4. एप्लिकेशन प्रमाणीकरणRequest ईवेंट में, कुकी का निरीक्षण करें और Context.User असाइन करें। नोट: यह मान स्वचालित रूप से AuthenticateRequest ईवेंट के बाद Thread.CurrentPrincipal को सौंपा गया है। यह एक बार का असाइनमेंट है और इसके बाद ये मान स्वचालित रूप से सिंक्रनाइज़ नहीं होते हैं।
  5. मेरा वेब प्राधिकरण एट्रिब्यूट, जो AuthorizeAttribute को विरासत में लेता है, वर्तमान HttpContext.User.Identity.Is प्रमाणीकृत और HttpContext.User.IsInRole जांचता है कि उपयोगकर्ता को कार्रवाई तक पहुंच है या नहीं।
+1

+1: यही वह है जो मैं करता हूं। मेरी पोस्ट बताती है कि कुकी का निरीक्षण कैसे करें। – LukLed

+0

उत्कृष्ट, इनपुट के लिए धन्यवाद – scottm

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