using System.IdentityModel.Tokens.Jwt; using System.Security.Claims; using System.Text; using Microsoft.IdentityModel.Tokens; using Mws.Application.Auth; namespace Mws.Infrastructure.Authentication; public class JwtTokenService(JwtOptions options) : ITokenService { public string CreateToken(Guid userId, string username) { var claims = new List { new(JwtRegisteredClaimNames.Sub, userId.ToString()), new(JwtRegisteredClaimNames.Jti, Guid.NewGuid().ToString()), new(ClaimTypes.Name, username), }; var key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(options.Secret)); var creds = new SigningCredentials(key, SecurityAlgorithms.HmacSha256); var token = new JwtSecurityToken( issuer: options.Issuer, audience: options.Audience, claims: claims, expires: DateTime.UtcNow.Add(options.Expiration), signingCredentials: creds); return new JwtSecurityTokenHandler().WriteToken(token); } }