asp.net - 有什么方法可以从此代码中将用户的角色保存在令牌中?
问题描述
如何找到一个人的角色并将其包含在令牌中,以便我可以使用它来授权角色?想法,解决方案?控制器装饰有[Authorize (Role = "Administrator")]
返回 403,所以我无法识别或无法访问它!
public class AuthController : ControllerBase
{
private readonly AuthOptions _authOptions;
private readonly SignInManager<User> _signInManager;
private readonly UserManager<User> _userManager;
private readonly IMapper _mapper;
public AuthController(IOptions<AuthOptions> authOption, SignInManager<User> signInManager, UserManager<User> userManager, IMapper mapper)
{
_authOptions = authOption.Value;
_signInManager = signInManager;
_userManager = userManager;
_mapper = mapper;
}
[AllowAnonymous]
[HttpPost("login")]
public async Task<IActionResult> Login([FromBody]UserForLoginDto userLoginDto)
{
var checkPassword = await _signInManager.PasswordSignInAsync(userLoginDto.Username, userLoginDto.Password,false,false);
if (checkPassword.Succeeded)
{
var signinCredentials = new SigningCredentials(_authOptions.GetSymmetricSecurityKey(), SecurityAlgorithms.HmacSha256);
var jwtSecurityToken = new JwtSecurityToken(
issuer: _authOptions.Issuer,
audience: _authOptions.Audience,
claims: new List<Claim>(),
expires: DateTime.Now.AddDays(30),
signingCredentials: signinCredentials);
var tokenHandler = new JwtSecurityTokenHandler();
var encodedToken = tokenHandler.WriteToken(jwtSecurityToken);
return Ok(new { AccessToken = encodedToken });
}
return Unauthorized();
}
}
解决方案
更改您的令牌生成方法,例如,
var tokenHandler = new JwtSecurityTokenHandler();
var key = Encoding.ASCII.GetBytes("your secret key");
var tokenDescriptor = new SecurityTokenDescriptor
{
Subject = new ClaimsIdentity(new Claim[]
{
new Claim(ClaimTypes.Name, "your_user_id"),
new Claim(ClaimTypes.Role, "your_role_name") //in your case here value "Administrator"
}),
Expires = DateTime.UtcNow.AddDays(30),
SigningCredentials = new SigningCredentials(new SymmetricSecurityKey(key),
SecurityAlgorithms.HmacSha256Signature)
};
var token = tokenHandler.CreateToken(tokenDescriptor);
var encodedToken = tokenHandler.WriteToken(token);
然后,您可以将Authorize
标签与角色一起使用。
[Authorize (Role = "Administrator")]
推荐阅读
- python - Anaconda Gstreamer Gst packge 缺少“jpegenc”
- chart.js - Chart.js 如何为两个数据集创建图表 wirhout y 轴
- authentication - Joomla 登录被拒绝
- r - Shiny App:在模块中进行翻译并在它们之间浏览时更新语言选择
- html - 使用网格的问题 - 居中文本和使用间隙
- swift - 尝试在 Swift MapView 中进行自定义标注并更改标记颜色
- python - 在 on_message 中使用 def 函数发送消息
- git - 搜索 git 历史记录的更好方法
- node.js - 指向 Node.js 应用程序的多个网站,提取主机名
- azure - Azure 数据工厂工作分支混乱