2009-06-09 11 views
19

मैं एएसपी .NET एमवीसी पर पढ़ रहा हूं, और मुझे अभी प्राधिकृत विशेषता के बारे में बात करने वाले एक अनुभाग में मिला है। यह कह रहा है कि प्राधिकरण विशेषता का उपयोग यह जांचने के लिए किया जाता है कि उपयोगकर्ता को नियंत्रक के खिलाफ प्रमाणित किया जाता है। क्या ये सच है? मुझे पता है कि विशेषता को प्राधिकरण उद्देश्यों के लिए उपयोग करने के लिए डिज़ाइन किया गया है, लेकिन यह प्रमाणीकरण के लिए इस विशेषता का उपयोग करने का सबसे अच्छा अभ्यास भी है?क्या एएसपी .NET MVC में प्राधिकरण विशेषता प्रमाणीकरण के साथ-साथ प्राधिकरण के लिए भी उपयोग की जाती है?

यदि नहीं, तो (प्रदर्शन नहीं कर रहा) सत्यापित करने के लिए सबसे अच्छा अभ्यास क्या है?

यदि हां, तो ऐसा क्यों किया जाता है? क्या मैं कुछ भूल रहा हूँ?

+0

बस खराब तरीके से दस्तावेज दस्तावेज? आप या तो एक अधिकृत उपयोगकर्ता को अधिकृत कर रहे हैं या अज्ञात उपयोगकर्ता को "अधिकृत" कर रहे हैं। – hometoast

+0

एक अनाम उपयोगकर्ता कभी अधिकृत नहीं किया जा सकता है। केवल प्रमाणित उपयोगकर्ताओं को अधिकृत किया जा सकता है। सबसे पहले लॉगिन (प्रमाणीकरण) आता है इसके बाद प्राधिकरण (अनुमति जांच) आता है। – Elisabeth

उत्तर

27

Authorize विशेषता का उपयोग यह देखने के लिए किया जा सकता है कि उपयोगकर्ता लॉग इन है या नहीं। इसका उपयोग यह जांचने के लिए भी किया जा सकता है कि उपयोगकर्ता एक विशिष्ट भूमिका का सदस्य है या उसका विशिष्ट नाम है।

यह वेब रूपों का उपयोग करते समय web.config में <authorization> अनुभाग द्वारा अनिवार्य रूप से संभाला जाता है।

यह प्रमाणीकरण विधि निर्दिष्ट नहीं करता है। इसे से web.config में वेब रूपों की तरह संभाला जाता है।

संपादित करें (प्रमाणीकरण और प्राधिकरण के बारे में स्पष्टीकरण):

प्रमाणीकरण पहचान सत्यापन है। यही है, आप यह देखने के लिए जांचते हैं कि उपयोगकर्ता कौन है। यह उपयोगकर्ता नाम और पासवर्ड की जांच करके, अपने विंडोज प्रमाणीकरण टोकन की जांच करके, रेटिना स्कैनिंग, आवाज पहचान या जो कुछ भी हो सकता है।

प्राधिकरण का उपयोग तक पहुंच उपयोगकर्ताओं को एक विशिष्ट संसाधन के लिए सीमित संसाधनों को पूरा करने वाले उपयोगकर्ताओं के लिए सीमित संसाधन है। उपयोगकर्ता को संसाधन में अधिकृत करने में सक्षम होने के लिए, आपको उपयोगकर्ता के अधिकारों को जानना चाहिए। इसे जांचने के लिए, आपको पता होना चाहिए कि उपयोगकर्ता पहले स्थान पर कौन है। तो उपयोगकर्ता को प्रमाणीकृत होना है।

अनिवार्य रूप से एक खाली [Authorize] विशेषता प्रमाणीकरण नहीं है, प्रमाणीकरण नहीं है। यह जांच नहीं करता कि आप कौन हैं। यह सिर्फ जांचता है कि जिस व्यक्ति को आपने सत्यापित किया है, उसके पास संसाधन तक पहुंच है या नहीं। हालांकि, इसका प्रमाणीकरण मानदंड "कोई भी सफलतापूर्वक प्रमाणित है।" आप एक अलग मानदंड निर्दिष्ट कर सकते हैं। तो, वास्तव में यह प्रमाणीकरण नहीं, प्रमाणीकरण कर रहा है।

+0

क्या मैं चिंतित होने के लिए गलत हूं कि ए को ट्रैक करने के लिए एक विशेषता का उपयोग किया जा रहा है चाहे उपयोगकर्ता अधिकृत है या नहीं। बी उपयोगकर्ता को प्रमाणित किया गया है या नहीं? – Joseph

+0

एक सरल [अधिकृत] प्रमाणीकृत होने की जांच करेगा। चीजें जैसे [प्राधिकरण (भूमिका = ...)] भूमिकाओं और अन्य सामानों की भी जांच करें। –

+1

मैं कार्यान्वयन को समझता हूं। मैं सोच रहा हूं कि [प्राधिकरण] के उपयोग के बजाय [प्रमाणीकरण] क्यों नहीं है (जो जांचता है कि उपयोगकर्ता प्रमाणित है या नहीं)। – Joseph

3

प्रमाणीकरण और प्रमाणीकरण दो अलग-अलग चिंताएं हैं।

प्रमाणीकरण सत्यापित करता है कि वह उपयोगकर्ता है जो वह कहता है कि वह हमेशा से अधिकांश वेब ऐप्स में किया जाता है, यह सत्यापित करके कि उसके पास कुछ ज्ञान है (जैसे पासवर्ड) जिसे केवल उसे पता होना चाहिए।

प्रमाणीकरण सत्यापित करता है कि एक प्रमाणीकृत उपयोगकर्ता को कुछ करने की अनुमति है। उदाहरण के लिए केवल प्रशासक व्यवस्थापक पृष्ठों तक पहुंच सकते हैं।

चूंकि हम केवल एक बार लॉग इन करने के बाद व्यक्ति की भूमिका प्राप्त कर सकते हैं, प्रमाणीकरण के लिए परीक्षण करने के लिए प्राधिकरण विशेषता का उपयोग करना संभव है।

इस ब्लॉग पोस्ट पर एक नज़र डालें और देखें कि लेखक को लागू करता है दोनों एक कस्टम अधिकृत और प्रमाणीकरण विशेषता:

Securing your controller actions

आप अधिकृत विशेषता प्रमाणीकरण के लिए जाँच करने के लिए है कि देखेंगे, केवल के बाद से प्रमाणीकृत उपयोगकर्ताओं की भूमिका हो सकती है।

+1

मैं समझता हूं कि प्रमाणीकरण और प्रमाणीकरण अलग-अलग चिंताएं हैं। मुझे परेशान करता है कि दोनों चिंताओं की जांच के लिए एक एकल विशेषता (अधिकृत) का उपयोग किया जा रहा है। यह मेरे प्रश्न की प्रकृति है। – Joseph

5

प्राधिकरण वास्तव में जांचता है कि उपयोगकर्ता प्रमाणीकृत है, अन्यथा यह उपयोगकर्ता के लिए भूमिका निर्धारित करने में सक्षम नहीं होगा या उपयोगकर्ता (अज्ञात के अलावा) वर्तमान उपयोगकर्ता है। यही है, अधिकृत होने के लिए, यदि अज्ञात पहुंच की अनुमति नहीं है, तो आपको पहले प्रमाणित होना होगा। नीचे आरटीएम संस्करण में AuthorizeCore विधि से प्रासंगिक स्निपेट है (http://www.codeplex.com/aspnet से)।

// This method must be thread-safe since it is called by the thread-safe OnCacheAuthorization() method. 
protected virtual bool AuthorizeCore(HttpContextBase httpContext) { 
    if (httpContext == null) { 
     throw new ArgumentNullException("httpContext"); 
    } 

    IPrincipal user = httpContext.User; 
    if (!user.Identity.IsAuthenticated) { 
     return false; 
    } 

    ... 

AuthorizeCore OnAuthorization में झूठी देता है, तो उसके बाद AuthorizationContext.Result एक नया HttpUnauthorizedResult जो उपयोगकर्ता का परिणाम देगा प्रवेश पृष्ठ (FormsAuthentication में) या एक त्रुटि ले जाया जा रहा करने के लिए निर्धारित है।

संपादित करें: अन्य उत्तरों पर अपनी टिप्पणियां पढ़ने के बाद, मैं कहूंगा कि आप बिंदु खो रहे हैं। तकनीकी रूप से यह केवल प्राधिकरण कर रहा है। प्रमाणीकरण का एक स्तर, न्यूनतम, यह है कि आपको कार्रवाई करने के लिए प्रमाणित करने की आवश्यकता है। आपको प्राधिकरण विशेषता के लिए किसी भी उपयोगकर्ता या भूमिका निर्दिष्ट नहीं करके यह मिलता है। जब तक यह प्रमाणीकृत है, किसी भी उपयोगकर्ता या भूमिका की अनुमति है। उपयोगकर्ताओं और/या भूमिकाओं के रूप में कार्य करने वाली भूमिकाओं को निर्दिष्ट करके आप कार्रवाई के दायरे को कम कर देते हैं और उपयोगकर्ता को केवल प्रमाणीकृत की आवश्यकता नहीं होती है (इसलिए आप नाम/भूमिका सदस्यता देख सकते हैं), लेकिन फ़िल्टर के आधार पर भी योग्यता प्राप्त करते हैं।

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