मैं चकित हूं कि कैसे मैं Googling के कई घंटों के बाद अपने ApiController तरीकों पर अधिकृत विशेषता का उपयोग करने के लिए नीचे लॉगिन स्क्रीन से किसी उपयोगकर्ता को प्रमाणित करने का एक स्पष्ट उदाहरण नहीं पा सका हूं।
ऐसा इसलिए है क्योंकि आप इन दो अवधारणाओं के बारे में भ्रमित हो रहे हैं:
प्रमाणीकरण वह तंत्र है जिसके द्वारा सिस्टम सुरक्षित रूप से अपने उपयोगकर्ताओं की पहचान कर सकता है। प्रमाणीकरण प्रणाली सवालों के जवाब प्रदान करती है:
- उपयोगकर्ता कौन है?
- क्या उपयोगकर्ता वास्तव में वह है जो वह खुद का प्रतिनिधित्व करता है?
प्राधिकरण वह तंत्र है जिसके द्वारा एक प्रणाली निर्धारित करती है कि सिस्टम द्वारा नियंत्रित संसाधनों के लिए किसी विशेष प्रमाणित उपयोगकर्ता की पहुँच किस स्तर तक होनी चाहिए। उदाहरण के लिए, एक डेटाबेस प्रबंधन प्रणाली को कुछ विशिष्ट व्यक्तियों को डेटाबेस से जानकारी प्राप्त करने की क्षमता प्रदान करने के लिए डिज़ाइन किया जा सकता है, लेकिन डेटाबेस में संग्रहीत डेटा को बदलने की क्षमता नहीं है, जबकि अन्य व्यक्तियों को डेटा बदलने की क्षमता प्रदान करता है। प्राधिकरण प्रणाली सवालों के जवाब प्रदान करती है:
- क्या उपयोगकर्ता X संसाधन R का उपयोग करने के लिए अधिकृत है?
- क्या उपयोगकर्ता X ऑपरेशन P करने के लिए अधिकृत है?
- क्या उपयोगकर्ता X संसाधन R पर ऑपरेशन P करने के लिए अधिकृत है?
Authorize
MVC में विशेषता उदाहरण के लिए पहुँच नियम लागू करने के लिए प्रयोग किया जाता है:
[System.Web.Http.Authorize(Roles = "Admin, Super User")]
public ActionResult AdministratorsOnly()
{
return View();
}
ऊपर नियम केवल अनुमति देगा में उन व्यवस्थापक और सुपर उपयोगकर्ता भूमिकाओं विधि का उपयोग करने की
ये नियम location
तत्व का उपयोग करके web.config फ़ाइल में भी सेट किए जा सकते हैं । उदाहरण:
<location path="Home/AdministratorsOnly">
<system.web>
<authorization>
<allow roles="Administrators"/>
<deny users="*"/>
</authorization>
</system.web>
</location>
हालाँकि, उन प्राधिकरण नियमों को निष्पादित करने से पहले, आपको वर्तमान वेब साइट पर प्रमाणित होना होगा ।
हालांकि ये समझाते हैं कि अनधिकृत अनुरोधों को कैसे संभालना है, ये स्पष्ट रूप से एक लॉगिनकंट्रोलर या ऐसा कुछ प्रदर्शित नहीं करते हैं जो उपयोगकर्ता क्रेडेंशियल्स के लिए पूछें और उन्हें मान्य करें।
यहाँ से, हम समस्या को दो में विभाजित कर सकते हैं:
एक ही वेब एप्लिकेशन के भीतर वेब एपीआई सेवाओं का उपभोग करते समय उपयोगकर्ताओं को प्रमाणित करें
यह सबसे सरल तरीका होगा, क्योंकि आप ASP.Net में प्रमाणीकरण पर भरोसा करेंगे
यह एक सरल उदाहरण है:
web.config
<authentication mode="Forms">
<forms
protection="All"
slidingExpiration="true"
loginUrl="account/login"
cookieless="UseCookies"
enableCrossAppRedirects="false"
name="cookieName"
/>
</authentication>
उपयोगकर्ताओं को खाते / लॉगिन मार्ग पर पुनर्निर्देशित किया जाएगा , वहां आप उपयोगकर्ता क्रेडेंशियल्स के लिए पूछने के लिए कस्टम नियंत्रण प्रस्तुत करेंगे और फिर आप उपयोग करके प्रमाणीकरण कुकी सेट करेंगे:
if (ModelState.IsValid)
{
if (Membership.ValidateUser(model.UserName, model.Password))
{
FormsAuthentication.SetAuthCookie(model.UserName, model.RememberMe);
return RedirectToAction("Index", "Home");
}
else
{
ModelState.AddModelError("", "The user name or password provided is incorrect.");
}
}
// If we got this far, something failed, redisplay form
return View(model);
क्रॉस - प्लेटफ़ॉर्म प्रमाणीकरण
यह मामला तब होगा जब आप केवल वेब एप्लिकेशन के भीतर वेब एपीआई सेवाओं को उजागर कर रहे हैं इसलिए, आपके पास सेवाओं का उपभोग करने वाला एक और ग्राहक होगा, ग्राहक एक और वेब एप्लिकेशन या कोई भी .net एप्लिकेशन (जीत फॉर्म, डब्ल्यूपीएफ, कंसोल, विंडोज सेवा) हो सकता है। आदि)
उदाहरण के लिए मान लें कि आप एक ही नेटवर्क डोमेन (इंट्रानेट के भीतर) पर एक अन्य वेब एप्लिकेशन से वेब एपीआई सेवा का उपभोग कर रहे हैं, इस मामले में आप ASP.Net द्वारा प्रदान किए गए विंडोज प्रमाणीकरण पर भरोसा कर सकते हैं।
<authentication mode="Windows" />
यदि आपकी सेवाओं को इंटरनेट पर उजागर किया जाता है, तो आपको प्रत्येक वेब एपीआई सेवा के लिए प्रमाणित टोकन को पास करना होगा।
अधिक जानकारी के लिए, निम्नलिखित लेखों के लिए एक लूट लें: