使用标识和Cookie身份验证
我试图在我的应用程序中同时使用cookie身份验证设置令牌身份验证。
我在asp.net核心2.0中创建了一个MVC项目,其中个人用户帐户为auth。 也为用户设置角色。
如果我遵循Shawn Wildermuth双授权方案的ASP-NET-Core-2的教程
一切工作正常,以获得注册用户的令牌。 但是,如果我在授权[Authorize(Roles =“Admin”)]上使用角色属性即时获得403响应。
我认为这是因为令牌没有收到身份验证的角色。
如何设置此? 有什么方法可以通过令牌进程的角色?
为了生成令牌,他正在使用这段代码:
[AllowAnonymous]
[HttpPost]
public async Task<IActionResult> GenerateToken([FromBody] LoginViewModel model) { if (ModelState.IsValid) {
var user = await _userManager.FindByEmailAsync(model.Email);
if (user != null)
{
var result = await _signInManager.CheckPasswordSignInAsync(user, model.Password, false);
if (result.Succeeded)
{
var claims = new[]
{
new Claim(JwtRegisteredClaimNames.Sub, user.Email),
new Claim(JwtRegisteredClaimNames.Jti, Guid.NewGuid().ToString()),
};
var key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(_config["Tokens:Key"]));
var creds = new SigningCredentials(key, SecurityAlgorithms.HmacSha256);
var token = new JwtSecurityToken(_config["Tokens:Issuer"],
_config["Tokens:Issuer"],
claims,
expires: DateTime.Now.AddMinutes(30),
signingCredentials: creds);
return Ok(new { token = new JwtSecurityTokenHandler().WriteToken(token) });
}
} }
return BadRequest("Could not create token"); }
你们有什么想法?
谢谢
如果您添加以下使用和代码,这应该有所帮助。
using System.Security.Claims;
...
var userRoles = await _userManager.GetRolesAsync(user);
var claims = new[]
{
new Claim(JwtRegisteredClaimNames.Sub, user.Email),
new Claim(JwtRegisteredClaimNames.Jti, Guid.NewGuid().ToString()),
}.Union(userRoles.Select(m => new Claim(ClaimTypes.Role, m)));
您可以看到联合使用ClaimTypes.Role类型添加角色,这将使它们能够用于AuthorizeAttribute
HTH
链接地址: http://www.djcxy.com/p/22437.html上一篇: Using Identity with token and cookie authentication
下一篇: Cookie Authentication not working with Authorization policy in asp.net core