using System.IdentityModel.Tokens.Jwt; using System.Security.Claims; using System.Text; using AGSS.Models.Entities; using Microsoft.IdentityModel.Tokens; namespace AGSS.Utilities; public class Jwt { private readonly IConfiguration _configuration; public Jwt(IConfiguration configuration) { _configuration = configuration; } public string BuildToken(IEnumerable claims) { DateTime expires = DateTime.Now.AddDays(int.Parse(_configuration["Jwt:ExpireMinutes"])); byte[] keyBytes = Encoding.UTF8.GetBytes(_configuration["Jwt:Key"]); var secKey = new SymmetricSecurityKey(keyBytes); var credentials = new SigningCredentials(secKey, SecurityAlgorithms.HmacSha256Signature); var tokenDescriptor = new JwtSecurityToken(expires: expires, signingCredentials: credentials, claims: claims); return new JwtSecurityTokenHandler().WriteToken(tokenDescriptor); } public string GenerateJwtToken(UserModel user,IList roles) { var claims = new List(); claims.Add(new Claim(JwtRegisteredClaimNames.Sub, user.Id.ToString())); claims.Add(new Claim(JwtRegisteredClaimNames.Jti, Guid.NewGuid().ToString())); // var roles = await user.GetRolesAsync(user); foreach (string role in roles) { claims.Add(new Claim(ClaimTypes.Role, role)); } string jwtToken = BuildToken(claims); return jwtToken; } }