ASP .NET 中的角色身份验证以 HTTP400 响应结束
Posted
技术标签:
【中文标题】ASP .NET 中的角色身份验证以 HTTP400 响应结束【英文标题】:Roles auth in ASP .NET ends up with a HTTP400 response 【发布时间】:2021-11-29 14:49:19 【问题描述】:我尝试在 ASP .NET Core 中进行简单的角色身份验证。制作方法如下:
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Login(LoginModel model)
if (ModelState.IsValid)
User user = await _db.Users.Include(u => u.Role).FirstOrDefaultAsync(u => u.Code == model.Code && u.Password == model.Password);
if (user != null)
await Authenticate(user);
return RedirectToAction("Cabinet", "Cabinet");
ModelState.AddModelError("", "Incorrect login or password");
return View(model);
private async Task Authenticate(User user)
var claims = new List<Claim>
new Claim(ClaimsIdentity.DefaultNameClaimType, user.Code),
new Claim(ClaimsIdentity.DefaultRoleClaimType, user.Role?.Name)
;
ClaimsIdentity id = new ClaimsIdentity(claims, "ApplicationCookie", ClaimsIdentity.DefaultNameClaimType, ClaimsIdentity.DefaultRoleClaimType);
await HttpContext.SignInAsync(CookieAuthenticationDefaults.AuthenticationScheme, new ClaimsPrincipal(id));
当我在CabinetController
中有这样的方法时,它工作得很好:
[Authorize(Roles = "admin,user")]
[HttpGet]
public async Task<IActionResult> Cabinet()
//some actions here
但是当我添加[ValidateAntiForgeryToken]
并且我的方法看起来像这样:
[Authorize(Roles = "admin,user")]
[ValidateAntiForgeryToken]
[HttpGet]
public async Task<IActionResult> Cabinet()
//some actions here
身份验证成功后,我得到了 HTTP 400。我认为RedirectToAction("Cabinet", "Cabinet");
会引发错误 400。我说的对吗?如果我是,为什么会这样?
【问题讨论】:
【参考方案1】:错误很明显。
当您在方法上添加ValidateAntiForgeryToken
时,您需要将防伪令牌与请求一起发送。
【讨论】:
以上是关于ASP .NET 中的角色身份验证以 HTTP400 响应结束的主要内容,如果未能解决你的问题,请参考以下文章
ASP.NET Core 身份中的角色声明与自定义身份验证中的角色权限相比
ASP.NET MVC 内联网应用程序。基于角色的身份验证链接到应用程序中的用户表
具有 Windows 身份验证的 ASP .NET 身份和数据库中的角色
通过 ASP.NET 核心身份中的角色声明进行 JWT 身份验证