using Microsoft.IdentityModel.Tokens; using System.Text; namespace MAX.Framework.Security; /// /// JWT 配置选项,默认绑定配置节 Jwt。 /// public class JwtOptions { /// /// 配置节名称 /// public const string SectionName = "Jwt"; /// /// 签发者 /// public string Issuer { get; set; } = "StoreHub"; /// /// 受众 /// public string Audience { get; set; } = "StoreHub.Client"; /// /// 签名密钥(HS256,至少 32 字节) /// public string SigningKey { get; set; } = "StoreHub-Development-SigningKey-0123456789abcdef0123456789abcdef"; /// /// 令牌有效期(分钟) /// public int ExpiresMinutes { get; set; } = 120; /// /// 时钟偏移(分钟),容忍客户端与服务器的时间偏差 /// public int ClockSkewMinutes { get; set; } = 5; /// /// 是否校验签发者 /// public bool ValidateIssuer { get; set; } = true; /// /// 是否校验受众 /// public bool ValidateAudience { get; set; } = true; /// /// 是否校验有效期 /// public bool ValidateLifetime { get; set; } = true; /// /// 根据当前选项构建 ,用于 JwtBearer 中间件与令牌校验。 /// public TokenValidationParameters ToTokenValidationParameters() { byte[] keyBytes = Encoding.UTF8.GetBytes(SigningKey); return new TokenValidationParameters { ValidateIssuerSigningKey = true, IssuerSigningKey = new SymmetricSecurityKey(keyBytes), ValidateIssuer = ValidateIssuer, ValidIssuer = Issuer, ValidateAudience = ValidateAudience, ValidAudience = Audience, ValidateLifetime = ValidateLifetime, ClockSkew = TimeSpan.FromMinutes(ClockSkewMinutes), }; } }