ASP.NET Core怎么进行身份验证和授权 JWT认证实现教程

来源:这里教程网 时间:2026-02-21 17:33:21 作者:

ASP.NET Core 中使用 JWT 进行身份验证和授权,核心是配置

Authentication
Authorization
中间件,并正确颁发、验证 Token。关键不在于写多少代码,而在于理解流程:登录发 Token → 请求带 Token → 中间件自动校验 → 控制器用 [Authorize] 限定访问。

启用 JWT 身份验证服务

Program.cs
(.NET 6+)中注册 JWT Bearer 验证服务,需提供密钥、签发者、受众等基础参数:

密钥必须是至少 256 位的对称密钥(如
new SymmetricSecurityKey(Encoding.UTF8.GetBytes("your-32-byte-secret-key-here"))
指定
ValidateIssuer
ValidateAudience
等为
true
时,Token 中必须包含匹配的
iss
aud
字段
设置
ClockSkew
可放宽 Token 过期时间容错(默认 5 分钟,设为
TimeSpan.Zero
表示严格校验)

生成并返回 JWT Token

在登录接口(如

POST /api/auth/login
)中,验证用户名密码后手动创建 Token:

ClaimsIdentity
或直接构建
Claim[]
数组,例如
new Claim(ClaimTypes.Name, user.Username)
new Claim("role", "admin")
使用
JwtSecurityTokenHandler
创建 Token 对象,设置有效期(
Expires
)、签名凭证(
SigningCredentials
调用
WriteToken()
得到字符串,通常以 JSON 形式返回:
{ "token": "xxx.yyy.zzz" }

保护 API 接口与角色/策略授权

[Authorize]
特性即可启用验证;进一步控制权限可结合角色或自定义策略:

[Authorize(Roles = "admin")]
要求用户拥有
role
声明且值为
admin
(注意:默认读取
ClaimTypes.Role
,若用自定义 key 如
"role"
,需在添加 JWT 服务时通过
TokenValidationParameters.NameClaimType
RoleClaimType
指定)
AddAuthorization
注册策略,例如限制仅 VIP 用户:
builder.Services.AddAuthorization(options => options.AddPolicy("VipOnly", p => p.RequireClaim("level", "vip")))
,然后在控制器上写
[Authorize(Policy = "VipOnly")]

前端请求记得带 Authorization Header

客户端每次请求受保护接口时,必须在 HTTP Header 中带上 Token:

格式固定为:
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...
漏掉
Bearer 
前缀(注意空格)会导致 401;Token 过期、签名无效、issuer 不匹配等都会返回 401 或 403
开发调试时可用 Postman 或 curl 快速验证:
curl -H "Authorization: Bearer xxx" https://localhost:5001/api/values

基本上就这些。JWT 流程不复杂但容易忽略细节——比如密钥长度不够报错、Claim 类型没对齐导致角色失效、Header 少了空格之类。把验证逻辑拆成“发 Token”和“验 Token”两步理清,再配好中间件和策略,就能稳稳跑起来。

相关推荐