ASP.NET MVC 5 में कस्टम प्रमाणीकरण कैसे लागू करें


80

मैं ASP.NET MVC 5 एप्लिकेशन विकसित कर रहा हूं। मेरे पास एक मौजूदा DB है, जिसमें से मैंने अपना ADO.NET एंटिटी डेटा मॉडल बनाया है। मेरे पास उस DB में एक तालिका है जिसमें "उपयोगकर्ता नाम" और "पासवर्ड" कॉलम है, और मैं अपने वेबएप में प्रमाणीकरण और प्राधिकरण को लागू करने के लिए उनका उपयोग करना चाहता हूं; मैं कोई अन्य डेटाबेस या तालिका या स्तंभ नहीं बना सकता और मैं ग्राहकों की आवश्यकताओं के कारण मानक पहचान प्रमाणीकरण का उपयोग नहीं कर सकता। मुझे साइनअप, पासवर्ड बदलने या अन्य सामान प्रबंधित करने की आवश्यकता नहीं है: बस पासवर्ड और उपयोगकर्ता नाम के साथ लॉगिन करें। मैं उसे कैसे कर सकता हूँ?

जवाबों:


158

हाँ तुम कर सकते हो। प्रमाणीकरण और प्राधिकरण भागों स्वतंत्र रूप से काम करते हैं। यदि आपकी अपनी प्रमाणीकरण सेवा है तो आप OWIN के प्राधिकरण भाग का उपयोग कर सकते हैं। पर विचार करें आप पहले से ही एक है UserManagerजो पुष्टि usernameऔर password। इसलिए आप अपनी पोस्ट बैक लॉगइन एक्शन में निम्न कोड लिख सकते हैं:

[HttpPost]
public ActionResult Login(string username, string password)
{
    if (new UserManager().IsValid(username, password))
    {
        var ident = new ClaimsIdentity(
          new[] { 
              // adding following 2 claim just for supporting default antiforgery provider
              new Claim(ClaimTypes.NameIdentifier, username),
              new Claim("http://schemas.microsoft.com/accesscontrolservice/2010/07/claims/identityprovider", "ASP.NET Identity", "http://www.w3.org/2001/XMLSchema#string"),

              new Claim(ClaimTypes.Name,username),

              // optionally you could add roles if any
              new Claim(ClaimTypes.Role, "RoleName"),
              new Claim(ClaimTypes.Role, "AnotherRole"),

          },
          DefaultAuthenticationTypes.ApplicationCookie);

        HttpContext.GetOwinContext().Authentication.SignIn(
           new AuthenticationProperties { IsPersistent = false }, ident);
        return RedirectToAction("MyAction"); // auth succeed 
    }
    // invalid username or password
    ModelState.AddModelError("", "invalid username or password");
    return View();
}

और आपका उपयोगकर्ता प्रबंधक कुछ इस तरह से हो सकता है:

class UserManager
{
    public bool IsValid(string username, string password)
    {
         using(var db=new MyDbContext()) // use your DbConext
         {
             // for the sake of simplicity I use plain text passwords
             // in real world hashing and salting techniques must be implemented   
             return db.Users.Any(u=>u.Username==username 
                 && u.Password==password); 
         }
    }
}

अंत में, आप एक Authorizeविशेषता जोड़कर अपने कार्यों या नियंत्रकों की रक्षा कर सकते हैं ।

[Authorize]
public ActionResult MySecretAction()
{
    // all authorized users can use this method
    // we have accessed current user principal by calling also
    // HttpContext.User
}

[Authorize(Roles="Admin")]
public ActionResult MySecretAction()
{
    // just Admin users have access to this method
} 

7
मैंने आपके प्रश्नों का उत्तर देने के लिए अभी अपनी पोस्ट अपडेट की है।
सैम फराजपुरगढ़ी

5
अरे, मैं आपको यह बताना चाहता हूं कि आपके जीथब्यू उदाहरण (टोकन टोकन) ने मेरी समस्याओं को हल कर दिया, बहुत बहुत धन्यवाद! अगर मैं कर सकता था तो मैं आपके उदाहरण को 1000 बार बढ़ा दूंगा :)
AME

6
नगेट पैकेजों की आवश्यकता: - Microsoft.AspNet.Identity.Core - Microsoft.AspNet.Identity.Owin - Microsoft.Owin - Microsoft.Owin.Host.SystemWeb - Microsoft.Owin.Security - Microsoft.Owin.Security-Cookies - Microsoft.Owin .Security.OAuth - ओविन
मैथ्यू

5
काश, इस प्रश्न के लिए आपके पास खुला इनाम होता, ताकि हम आपको +1000 दे सकें। कृपया इसे कहीं ब्लॉग पर पोस्ट करें ताकि खोज इंजन इस तक पहुंच सकें। यह इतना आसान और सुरुचिपूर्ण समाधान है। मैंने OWIN और OAuth2 प्रदान करने के बारे में पढ़ने में दो दिन बिताए और मैं तारों को जोड़ने में असमर्थ था।
16'16

2
@SamFarajpourGhamari: क्या आप बता सकते हैं कि Loginकोड में लंबे समय तक तार की आवश्यकता क्यों है ? ... new Claim("http://schemas.microsoft.com/accesscontrolservice/2010/07/claims/identityprovider", "ASP.NET Identity", "http://www.w3.org/2001/XMLSchema#string")मैंने जाँच की कि कोड इसके बिना ठीक काम करता है!
एस। सोरपोशन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.