using Microsoft.Extensions.Configuration; using Microsoft.IdentityModel.Tokens; using System.IdentityModel.Tokens.Jwt; using System.Security.Claims; using System.Text; namespace AssetManager.Services.Services; public class JwtService { private readonly string _secretKey; private readonly string _issuer; private readonly string _audience; public JwtService(IConfiguration configuration) { _secretKey = configuration["Jwt:SecretKey"] ?? "your-strong-secret-key-here-2026"; _issuer = configuration["Jwt:Issuer"] ?? "AssetManager"; _audience = configuration["Jwt:Audience"] ?? "AssetManager"; } public string GenerateToken(string userId, string userName, string email) { var claims = new[] { new Claim(JwtRegisteredClaimNames.Sub, userId), new Claim(JwtRegisteredClaimNames.Name, userName), new Claim(JwtRegisteredClaimNames.Email, email), new Claim(JwtRegisteredClaimNames.Jti, Guid.NewGuid().ToString()) }; var key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(_secretKey)); var credentials = new SigningCredentials(key, SecurityAlgorithms.HmacSha256); var token = new JwtSecurityToken( issuer: _issuer, audience: _audience, claims: claims, expires: DateTime.Now.AddHours(24), signingCredentials: credentials); return new JwtSecurityTokenHandler().WriteToken(token); } }