public async Task <ActionResult <ApiResponse> > Renew() { try { var buildTokenDTO = new BuildTokenDTO() { UserName = User.Identity.Name }; return(ApiResponse.Create(HttpStatusCode.OK, await BuildToken(buildTokenDTO))); } catch (Exception) { return(ApiResponse.Create(HttpStatusCode.InternalServerError, null, "InternalServerError_Error")); } }
private async Task <UserToken> BuildToken(BuildTokenDTO userinfo) { List <Claim> claims = new(); claims.Add(new Claim(ClaimTypes.Name, userinfo.UserName)); if (!String.IsNullOrEmpty(userinfo.CurrencyId.ToString())) { claims.Add(new Claim("CurrencyId", userinfo.CurrencyId.ToString())); } var identityUser = await _userManager.FindByNameAsync(userinfo.UserName); var claimsDB = await _userManager.GetClaimsAsync(identityUser); var user = await _signInManager.UserManager.FindByNameAsync(userinfo.UserName); var rolesDB = await _signInManager.UserManager.GetRolesAsync(user); claims.AddRange(claimsDB); foreach (var role in rolesDB) { claims.Add(new Claim(ClaimTypes.Role, role)); } var key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(_configuration["JWT:key"])); var creds = new SigningCredentials(key, SecurityAlgorithms.HmacSha256); var expiration = DateTime.UtcNow.AddDays(1); JwtSecurityToken token = new JwtSecurityToken( issuer: "AD", audience: "AD", claims: claims, expires: expiration, signingCredentials: creds); return(new UserToken() { Token = new JwtSecurityTokenHandler().WriteToken(token), Expiration = expiration }); }