using System.IdentityModel.Tokens.Jwt; using System.Security.Claims; using Microsoft.Extensions.Logging; using Microsoft.IdentityModel.Tokens; namespace JWTService { public interface IJWTService { string CreateJwtToken(); JwtSecurityToken ReadJwtToken(string token); } public class JWTService : IJWTService { private readonly ILogger _logger; private readonly JwtSecurityTokenHandler _tokenHandler; private readonly IJwtConfig _serviceConfig; /// /// /// /// public JWTService( ILogger logger, IJwtConfig serviceConfig ) { _logger = logger; _serviceConfig = serviceConfig; _tokenHandler = new JwtSecurityTokenHandler(); } public string? CreateJwtToken() { if (_serviceConfig.Secret == null) return null; if (_serviceConfig.Expires == null) return null; var key = Convert.FromBase64String(_serviceConfig.Secret); // add roles to claims identity from database var claims = new List() {}; var token = _tokenHandler.CreateToken(new SecurityTokenDescriptor { IssuedAt = DateTime.UtcNow, Subject = new ClaimsIdentity(claims), Expires = DateTime.UtcNow.AddDays(_serviceConfig.Expires.Value), SigningCredentials = new SigningCredentials(new SymmetricSecurityKey(key), SecurityAlgorithms.HmacSha512Signature), }); return _tokenHandler.WriteToken(token); } //public string CreateJwtToken(IEnumerable issuer, DateTime expires, string userId, string userEmail, string userName, IEnumerable userRoles) { // var key = Convert.FromBase64String(_serviceConfig.Secret); // // add roles to claims identity from database // var claims = new List() { // new Claim(ClaimTypes.Actor, userId), // new Claim(ClaimTypes.Email, userEmail), // new Claim(ClaimTypes.NameIdentifier, userName), // // new Claim(ClaimTypes.Webpage, issuer) // }; // foreach (var role in userRoles) // claims.Add(new Claim(ClaimTypes.Role, role)); // foreach (var iss in issuer) // claims.Add(new Claim(ClaimTypes.Webpage, iss)); // var token = _tokenHandler.CreateToken(new SecurityTokenDescriptor { // IssuedAt = DateTime.UtcNow, // Subject = new ClaimsIdentity(claims), // Expires = expires, // SigningCredentials = new SigningCredentials(new SymmetricSecurityKey(key), SecurityAlgorithms.HmacSha512Signature), // }); // return _tokenHandler.WriteToken(token); //} public JwtSecurityToken ReadJwtToken(string token) => _tokenHandler.ReadJwtToken(token); } }