.NET 8自定义JWT TokenHandler遇HTTP 401未授权错误求解决
问题解决:自定义TokenHandler后仍返回401的修正方案
你的代码核心问题在于自定义TokenHandler返回的结果缺少两个关键配置,导致ASP.NET Core身份验证系统无法正确识别有效身份:
1. ClaimsIdentity必须指定AuthenticationType
ASP.NET Core要求ClaimsIdentity的AuthenticationType必须与JwtBearer的默认认证方案("Bearer")匹配,否则会被判定为无效身份。
2. TokenValidationResult需赋值SecurityToken
即使不需要验证令牌签名,TokenValidationResult的SecurityToken属性不能为null,部分内部逻辑会检查该值是否存在。
修改后的MyJwtTokenHandler代码:
public class MyJwtTokenHandler : TokenHandler { public override Task<TokenValidationResult> ValidateTokenAsync(string token, TokenValidationParameters validationParameters) { // 指定AuthenticationType为"Bearer",匹配JwtBearer默认认证方案 ClaimsIdentity identity = new( [ new(ClaimTypes.Name, "John Doe"), new(ClaimTypes.Email, "johndoe@gmail.com") ], "Bearer"); var result = new TokenValidationResult { IsValid = true, ClaimsIdentity = identity, // 赋值空JwtSecurityToken,避免null检查失败 SecurityToken = new JwtSecurityToken() }; return Task.FromResult(result); } }
额外检查项:
- 确认请求头格式正确:
Authorization: Bearer {你的令牌内容} - 排查是否有其他中间件(如CORS、其他认证组件)干扰身份验证流程
内容的提问来源于stack exchange,提问作者ngruson
相关产品推荐
相关产品推荐

