Ich entwickle eine MVC 5- Webanwendung mit dem Entity Framework 5 Database First- Ansatz. Ich verwende OWIN zur Authentifizierung von Benutzern. Unten sehen Sie meine Anmeldemethode in meinem Account Controller.
public ActionResult Login(LoginViewModel model, string returnUrl)
{
if (ModelState.IsValid)
{
var user = _AccountService.VerifyPassword(model.UserName, model.Password, false);
if (user != null)
{
var identity = new ClaimsIdentity(new[] { new Claim(ClaimTypes.Name, model.UserName), }, DefaultAuthenticationTypes.ApplicationCookie, ClaimTypes.Name, ClaimTypes.Role);
identity.AddClaim(new Claim(ClaimTypes.Role, "guest"));
identity.AddClaim(new Claim(ClaimTypes.GivenName, "A Person"));
identity.AddClaim(new Claim(ClaimTypes.Sid, user.userID)); //OK to store userID here?
AuthenticationManager.SignIn(new AuthenticationProperties
{
IsPersistent = model.RememberMe
}, identity);
return RedirectToAction("Index", "MyDashboard");
}
else
{
ModelState.AddModelError("", "Invalid username or password.");
}
}
// If we got this far, something failed, redisplay form
return View(model);
}
Wie Sie sehen, erstelle ich eine ClaimsIdentity , füge mehrere Claims hinzu und übergebe sie dann mit dem AuthenticationManager an OWIN , um die Anmeldung durchzuführen.
Das Problem, das ich habe, ist, dass ich nicht sicher bin, wie ich auf die Ansprüche im Rest meiner Anwendung zugreifen soll, weder in Controllern noch in Razor Views.
Ich hatte den in diesem Tutorial aufgeführten Ansatz ausprobiert
Ich habe dies beispielsweise in meinem Controller-Code versucht, um Zugriff auf die an die Ansprüche übergebenen Werte zu erhalten. Der Benutzer ist jedoch gleich null
var ctx = HttpContext.GetOwinContext();
ClaimsPrincipal user = ctx.Authentication.User;
IEnumerable<Claim> claims = user.Claims;
Vielleicht fehlt mir hier etwas.
AKTUALISIEREN
Basierend auf Darins Antwort habe ich seinen Code hinzugefügt, aber ich sehe immer noch keinen Zugriff auf die Ansprüche. Bitte sehen Sie den Screenshot unten, der zeigt, was ich sehe, wenn ich mit der Maus über die Identität schwebe.