Ja, du kannst. Authentifizierungs- und Autorisierungsteile arbeiten unabhängig voneinander. Wenn Sie über einen eigenen Authentifizierungsdienst verfügen, können Sie einfach den Autorisierungsteil von OWIN verwenden. Bedenken Sie, dass Sie bereits eine haben, UserManager
die validiert username
und password
. Daher können Sie den folgenden Code in Ihre Post-Back-Anmeldeaktion schreiben:
[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();
}
Und Ihr Benutzermanager kann ungefähr so aussehen:
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);
}
}
}
Am Ende können Sie Ihre Aktionen oder Controller schützen, indem Sie ein Authorize
Attribut hinzufügen .
[Authorize]
public ActionResult MySecretAction()
{
}
[Authorize(Roles="Admin")]
public ActionResult MySecretAction()
{
}
Login
Code erforderlich ist ?... new Claim("http://schemas.microsoft.com/accesscontrolservice/2010/07/claims/identityprovider", "ASP.NET Identity", "http://www.w3.org/2001/XMLSchema#string")
Ich habe überprüft, ob der Code ohne ihn einwandfrei funktioniert!