抱歉,我丢失了此帐户的密码,但我已经有了如何使用 JWT 令牌持有者实施角色基础授权的解决方案。
var user = _userRepository.CheckLogin(login);
if (user.UserID > 0)
{
var _userManager = HttpContext.User.Claims;
var secretKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(_configuration["Token:SecretKey"]));
var credentials = new SigningCredentials(secretKey, SecurityAlgorithms.HmacSha512);
var claims = new[] {
new Claim(JwtRegisteredClaimNames.UniqueName, user.Username), // ClaimType.Name
new Claim(JwtRegisteredClaimNames.Email, user.EmailAddress), // ClaimType.EmailAddress
new Claim(JwtRegisteredClaimNames.NameId, user.UserID.ToString()), // ClaimType.NameIdentifier
new Claim(JwtRegisteredClaimNames.Jti, Guid.NewGuid().ToString()), // jti
new Claim(JwtRegisteredClaimNames.Actort, user.UserKey), // ClaimType.Actor
new Claim(ClaimTypes.Role, user.Type) // ClaimType.Role add role for authorization.
};
var stringToken = new JwtSecurityToken(
_configuration["Token:Issuer"],
_configuration["Token:Issuer"],
claims,
expires: DateTime.Now.AddMinutes(Convert.ToInt32(_configuration["Token:ExpirationMinutes"])),
notBefore: DateTime.Now,
signingCredentials: credentials
);
var userToken = new JwtSecurityTokenHandler().WriteToken(stringToken);
return Ok(new { token = userToken });
}
在您的声明列表中添加ClaimTypes.Role 将解决此问题,现在您可以将[Authorize(Roles = "???")] 用于您的控制器。
我希望这将帮助任何使用 JWT Bearer 身份验证添加角色的人。