59

'da özel kimlik doğrulaması nasıl uygulanır ASP.NET MVC 5 uygulaması geliştiriyorum. ADO.NET Varlık Veri Modelimi oluşturduğum bir DB'im var. Bu kullanıcı veritabanında "kullanıcı adı" ve "şifre" sütunu içeren bir tablo var ve bunları Webapp'ımda kimlik doğrulama ve yetkilendirme uygulamak için kullanmak istiyorum; Başka bir veritabanı veya tablo veya sütun oluşturamıyorum ve müşterinin gereksinimleri nedeniyle standart Kimlik kimlik doğrulamasını kullanamıyorum. Kayıt, şifre değiştirme veya diğer materyalleri yönetmem gerekli değil: sadece şifre ve kullanıcı adı ile giriş yapın. Bunu nasıl yapabilirim?ASP.NET MVC 5

cevap

112

Evet, yapabilirsiniz. Kimlik Doğrulama ve Yetkilendirme bölümleri bağımsız olarak çalışır. Kendi kimlik doğrulama servisinize sahipseniz, sadece OWIN'in yetkilendirme bölümünü kullanabilirsiniz. Zaten username ve password onaylayan bir UserManager olduğunu düşünün.

[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(); 
} 

Ve kullanıcı yöneticisi böyle bir şey olabilir: Bu nedenle Sonradan geri giriş eylem aşağıdaki kodu yazabilirsiniz

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); 
     } 
    } 
} 

Sonunda, ile eylemleri veya denetleyicileri koruyabilir Authorize özniteliği ekleyerek.

[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 
} 
+0

Üzgünüm, kimlik doğrulamasıyla yeni başlayan bir kullanıcıyım. Shuold nerede bu kodu kullanırım? MVC'ye EF sınıfından kullanıcı adı ve şifre alanları almasını nasıl söyleyebilirim? –

+4

Sorularıma cevap vermek için gönderimi yeni güncelledim. –

+0

Teşekkürler! Harika çalışıyor! –