44 lines
1.5 KiB
C#
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;
|
|
}
|
|
} |