using System.IdentityModel.Tokens.Jwt; using System.Security.Claims; using System.Text; using AgriculturalPlatform.Api.Models; using Microsoft.IdentityModel.Tokens; namespace AgriculturalPlatform.Api.Services; public class JwtService(IConfiguration config) { private readonly string _key = config["Jwt:Key"] ?? "AgriculturalPlatform-Default-Jwt-Secret-Key-2026!"; private readonly string _issuer = config["Jwt:Issuer"] ?? "AgriculturalPlatform"; private readonly string _audience = config["Jwt:Audience"] ?? "AgriculturalPlatform.Client"; public string Generate(User user) { var claims = new List { new(ClaimTypes.NameIdentifier, user.Id.ToString()), new(ClaimTypes.Name, user.Username), new(ClaimTypes.Role, user.Role.ToString()), new("realName", user.RealName), new("orgId", user.OrgId?.ToString() ?? "") }; var key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(_key)); var creds = new SigningCredentials(key, SecurityAlgorithms.HmacSha256); var token = new JwtSecurityToken( issuer: _issuer, audience: _audience, claims: claims, expires: DateTime.Now.AddDays(7), signingCredentials: creds); return new JwtSecurityTokenHandler().WriteToken(token); } }