Có, bạn có thể. Các bộ phận Xác thực và Ủy quyền hoạt động độc lập. Nếu bạn có dịch vụ xác thực của riêng mình, bạn chỉ có thể sử dụng phần ủy quyền của OWIN. Hãy xem xét bạn đã có một UserManager
xác thực username
và password
. Do đó, bạn có thể viết mã sau trong hành động đăng nhập lại bài đăng của mình:
[HttpPost]
public ActionResult Login(string username, string password)
{
if (new UserManager().IsValid(username, password))
{
var ident = new ClaimsIdentity(
new[] {
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),
new Claim(ClaimTypes.Role, "RoleName"),
new Claim(ClaimTypes.Role, "AnotherRole"),
},
DefaultAuthenticationTypes.ApplicationCookie);
HttpContext.GetOwinContext().Authentication.SignIn(
new AuthenticationProperties { IsPersistent = false }, ident);
return RedirectToAction("MyAction");
}
ModelState.AddModelError("", "invalid username or password");
return View();
}
Và trình quản lý người dùng của bạn có thể giống như sau:
class UserManager
{
public bool IsValid(string username, string password)
{
using(var db=new MyDbContext())
{
return db.Users.Any(u=>u.Username==username
&& u.Password==password);
}
}
}
Cuối cùng, bạn có thể bảo vệ các hành động hoặc bộ điều khiển của mình bằng cách thêm một Authorize
thuộc tính.
[Authorize]
public ActionResult MySecretAction()
{
}
[Authorize(Roles="Admin")]
public ActionResult MySecretAction()
{
}