'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
59
A
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
}
Ü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? –
Sorularıma cevap vermek için gönderimi yeni güncelledim. –
Teşekkürler! Harika çalışıyor! –