44 lines
1.5 KiB
C#

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<Claim> 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 async Task<string> GenerateJwtToken(UserModel user,IList<string> roles)
{
var claims = new List<Claim>();
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;
}
}