我已经完成了令牌生成,但我也想在令牌中发送用户角色。我也写了一些与发送角色相关的代码,但它不能正常工作。
我也有这个原型的问题。 var jwtAuthorizationManager = new JWTAuthorizationManager();
这是我的代码
公共类 JWTAuthorizationManager { 私人只读 UserManager _userManager;
public JWTAuthorizationManager(UserManager<User> _userManager)
{
this._userManager = _userManager;
}
public async Task<JwtFeildsDto> Authenticate(string UserName, string PasswordHash)
{
var user = await _userManager.FindByNameAsync(UserName);
//پیدا کردن همه نقش های کاربر
var roles = await _userManager.GetRolesAsync(user);
//ایجاد تاریخ انقضای توکن
var tokenExpireTimeStamp = DateTime.Now.AddHours(Constansts.JWT_TOKEN_EXPIRE_TIME);
//ایجاد متغیر از کلاس مشخص شده برای ایجاد توکن و اطلاعات همراه آن
var jwtSecurityTokenHandler = new JwtSecurityTokenHandler();
//ایجاد آرایه ای از بایت ها به عنوان کلید توکن
var tokenKey = Encoding.ASCII.GetBytes(Constansts.JWT_SECURITY_KEY_FOR_TOKEN);
//از این کلاس برای نگهداری ویژگیها و اطلاعات درون توکن استفاده می شود.
var List = new List<Claim>()
{
new Claim("username", UserName),
new Claim(ClaimTypes.PrimaryGroupSid,"User Group 01")
};
var securityTokenDescriptor = new SecurityTokenDescriptor
{
Subject = new ClaimsIdentity(List),
Expires = tokenExpireTimeStamp,
//امضا یا اعتبارنامه یا مجوز ورود
SigningCredentials = new SigningCredentials(new SymmetricSecurityKey(tokenKey),SecurityAlgorithms.HmacSha256Signature)
};
foreach (var item in roles)
{
List.Add(new Claim(ClaimTypes.Role, item));
}
var securityToken = jwtSecurityTokenHandler.CreateToken(securityTokenDescriptor);
var token = jwtSecurityTokenHandler.WriteToken(securityToken);
return new JwtFeildsDto
{
token = token,
user_name = UserName,
expire_time = (int)tokenExpireTimeStamp.Subtract(DateTime.Now).TotalSeconds
};
}
}
[HttpPost]
public async Task<IActionResult> Login([FromForm] String userName, String
password,bool remmberMe)
{
if (ModelState.IsValid)
{
var result = await _loginService.UserLogin(userName, password,remmberMe);
if (result == true)
{
var jwtAuthorizationManager = new JWTAuthorizationManager();
var loginResult = jwtAuthorizationManager.Authenticate(userName, password);
return Ok(loginResult);
}
else
{
return Unauthorized(MessageLib.Message.unaAuthorized);
}
}
return BadRequest();
}