using System.IdentityModel.Tokens.Jwt; using System.Security.Claims; using System.Text; using Core.Entities.Identity; using Core.Interfaces; using Microsoft.Extensions.Configuration; using Microsoft.IdentityModel.Tokens; namespace Infrastructure.Services { public class TokenService : ITokenService { private readonly IConfiguration _config; private readonly SymmetricSecurityKey _key; public TokenService(IConfiguration config) { _config = config; _key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(_config["Token:Key"])); } public string CreateToken(AppUser user) { var claims = new List { new Claim(JwtRegisteredClaimNames.Email, user.Email), new Claim(JwtRegisteredClaimNames.GivenName, user.DisplayName) }; var creds = new SigningCredentials(_key, SecurityAlgorithms.HmacSha512Signature); var tokenDescriptor = new SecurityTokenDescriptor { Subject = new ClaimsIdentity(claims), Expires = DateTime.Now.AddDays(7), SigningCredentials = creds, Issuer = _config["Token:Issuer"] }; var tokenHandler = new JwtSecurityTokenHandler(); var token = tokenHandler.CreateToken(tokenDescriptor); return tokenHandler.WriteToken(token); } } }