在 ASP.NET Core 中实现 JWT Bearer 认证,核心是配置服务、签发 Token、验证签名,并结合授权策略控制访问。不复杂但容易忽略细节。
配置 JWT Bearer 认证服务
在 Program.cs 中注册认证服务,指定密钥、颁发者、受众等参数,确保与签发 Token 时一致:
使用 AddAuthentication().AddJwtBearer() 添加 JWT 支持 密钥必须是 symmetric security key(如从字符串生成的SigningCredentials) ValidIssuer 和 ValidAudience 要和 Token 中的
iss、
aud字段严格匹配 建议启用 ValidateLifetime 和 ValidateIssuerSigningKey(默认开启)
签发 JWT Token 的基本流程
用户登录成功后,手动创建并返回 Token。关键步骤包括:
构建 ClaimsIdentity 或直接准备Claim[](如
new Claim(ClaimTypes.Name, "user1")) 用 SecurityTokenDescriptor 设置有效期(
Expires)、签名凭证、issuer/audience 通过 JwtSecurityTokenHandler 创建并 WriteToken() 输出字符串 通常以
{"token": "xxx"} 形式返回给前端
在控制器中使用 [Authorize] 控制访问
认证通过后,[Authorize] 才能生效。注意几个常见情况:
未加 [Authorize] 的接口默认允许匿名访问 加了但没配置认证方案?会报 401 或 500 —— 检查 AddAuthentication() 是否调用、顺序是否在 UseAuthentication() 之前 想限制特定角色?用[Authorize(Roles = "Admin")],前提是 Token 中包含
role声明且名称匹配(如
new Claim(ClaimTypes.Role, "Admin")) 自定义策略?用 AddAuthorization().AddPolicy() 配合
[Authorize(Policy = "MyPolicy")]
前端请求记得带 Authorization Header
客户端必须在请求头中提供 Token,格式固定:
Authorization: Bearerbearer或
JWTToken 过期或签名无效 → 返回 401;格式错误(如缺空格)→ 可能 401 或静默失败,取决于中间件配置
基本上就这些。JWT 是无状态认证的常用选择,只要密钥安全、时间窗口合理、Claim 设计清晰,就能稳定支撑多数业务场景。
