SuperAPI AI 工具集

dotnet-jwt-authentication

安全与审计

查看项目

更新于 10-16 02:06

技能介绍

用途

该技能用于为 .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 版本、收费方式、平台限制及实际运行效果等信息,暂未提供。