最佳答案
我正在开发一个 MVC 5网络应用程序使用 实体框架5数据库优先的方法。我使用 Owen对用户进行身份验证。下面显示了 Account 控制器中的 Login 方法。
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);
}
正如您所看到的,我正在创建一个 声明身份并向它添加几个声明,然后使用 认证管理器将其传递给 Owen以执行登录。
我遇到的问题是,我不确定如何在我的应用程序的其余部分访问索赔,无论是在控制器还是在剃刀视图。
我已经尝试了本教程中列出的方法
例如,我在 Controller 代码中尝试了这种方法,试图访问传递给 Clamings 的值,但是访问的是用户。声明等于空
var ctx = HttpContext.GetOwinContext();
ClaimsPrincipal user = ctx.Authentication.User;
IEnumerable<Claim> claims = user.Claims;
也许我遗漏了什么。
更新
根据 Darin 的回答,我加入了他的代码但还是看不到索赔的权限。请看下面的屏幕截图,显示我看到什么时悬停在身份。索赔。