用途
该技能用于为 .NET API 实现 JWT(JSON Web Token)认证,采用访问令牌与刷新令牌分离的方案:访问令牌为短期 JWT,在响应体中返回;刷新令牌存放于 HttpOnly Cookie 中,具备安全属性且无法通过 JavaScript 访问。
主要能力
- 令牌生成:创建访问令牌与刷新令牌。
- 令牌校验:校验传入的令牌。
- 刷新令牌轮换:每次刷新时签发新的刷新令牌。
- 用户上下文:从声明(claims)中提取用户信息。
- 选项模式:通过 JwtOptions 配置过期时间、签发者、受众等。
- 安全审计:提供全面的事件跟踪以支持合规。
组件结构
- IJwtService:令牌生成接口,位于 Application/Abstractions。
- JwtService:令牌生成实现,位于 Infrastructure/Authentication。
- JwtOptions:配置(过期时间、签发者等),位于 Infrastructure/Authentication。
- JwtBearerOptionsSetup:配置 JWT 校验,位于 Infrastructure/Authentication。
- IUserContext:当前用户信息,位于 Application/Abstractions。
- UserContext:从 HttpContext 提取,位于 Infrastructure/Authentication。
- IRefreshTokenRepository:刷新令牌存储,位于 Domain/Identity。
- CookieSettings:Cookie 配置,位于 Infrastructure/Authentication。
使用方式
配置项通过 appsettings.json 的 Jwt 节提供,包括 Issuer、Audience、SecretKey、AccessTokenExpirationMinutes(默认 60)、RefreshTokenExpirationDays(默认 7)以及 Cookie 子配置(Name 默认 X-Refresh-Token、Domain、Path 默认 /api/v1/auth、SameSite 默认 Strict、SecureOnly 默认 true)。
JwtService 通过 IOptions<JwtOptions> 与 IDateTimeProvider 注入,使用 HmacSha256 对称密钥签名,生成包含 sub、email、jti、iat 以及角色、权限和附加声明的访问令牌;刷新令牌为 64 字节随机数经 Base64 编码的不透明字符串,并以 SHA256 哈希形式存储。
RefreshTokenCookieManager 负责设置、读取与清除刷新令牌 Cookie,设置 HttpOnly、Secure、SameSite、Expires、Path、Domain 与 IsEssential 属性。
RefreshToken 实体包含 Id、UserId、TokenHash、CreatedAt、ExpiresAt、RevokedAt、ReplacedByTokenHash、DeviceInfo、IpAddress,并提供 IsExpired、IsRevoked、IsActive 状态判断与 Create、Revoke 方法。
JwtBearerOptionsSetup 实现 IConfigureNamedOptions<JwtBearerOptions>,配置 ValidateIssuer、ValidIssuer、ValidateAudience、ValidAudience、ValidateIssuerSigningKey、IssuerSigningKey、ValidateLifetime 以及 ClockSkew 为 TimeSpan.Zero。
适用场景
适用于采用 Clean Architecture 分层的 .NET API 项目,需要为接口添加基于 JWT 的身份认证、刷新令牌管理与用户上下文提取能力。
限制
资料未提供该技能的安装命令、依赖版本、支持的 .NET 版本、收费方式、平台限制及实际运行效果等信息,暂未提供。