using Microsoft.IdentityModel.Tokens; using System.IdentityModel.Tokens.Jwt; using System.Security.Claims; using System.Text; namespace HuntingAppApi.Services; public sealed class JwtTokenService(IConfiguration configuration) { public string CreateToken(Guid userId, string displayName, string? email) { var claims = new List { new(JwtRegisteredClaimNames.Sub, userId.ToString()), new("display_name", displayName) }; if (!string.IsNullOrWhiteSpace(email)) claims.Add(new Claim(JwtRegisteredClaimNames.Email, email)); var key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(configuration["Authentication:JwtSecret"]!)); var credentials = new SigningCredentials(key, SecurityAlgorithms.HmacSha256); var token = new JwtSecurityToken( issuer: configuration["Authentication:Issuer"], audience: configuration["Authentication:Audience"], claims: claims, expires: DateTime.UtcNow.AddDays(14), signingCredentials: credentials); return new JwtSecurityTokenHandler().WriteToken(token); } }