using Microsoft.IdentityModel.Tokens;
using System.Text;
namespace StoreHub.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),
};
}
}