.NET 6 Preview7开发Blazor WASM出现Bearer invalid_token错误如何解决
错误原因
- 最核心的原因是请求头中Authorization字段的Token携带了多余的双引号:JWT认证规范要求
Authorization: Bearer <token>格式,Token本身不允许包裹引号,ASP.NET Core的JWT验证中间件会将引号作为Token的一部分进行校验,自然会验证失败。你单独解码Token时大概率自动去掉了首尾的引号,所以能解码成功。 - 签名密钥不匹配:你代码里验证环节用的是配置项
Jwt:Key(缺省值为MyApplicationKey),如果签发Token时用的是示例里的硬编码密钥mysupers3cr3tsharedkey!,两者不一致会直接导致签名验证失败。 - 额外可能原因:Token已过期、服务器与Token签发方的系统时间差超过默认5分钟时钟偏移、Token的Issuer/Audience和配置值不匹配。
解决方案
- 修正前端请求头格式:Blazor WASM端封装HttpClient时,确保给Authorization头赋值时不要给Token加引号,正确的赋值代码示例:
httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token); // 不要手动拼接字符串加引号,比如错误写法:$"Bearer \"{token}\""
- 统一签发与验证的签名密钥:确认签发Token时用的密钥和验证环节的
IssuerSigningKey完全一致,如果用配置存储密钥,确保appsettings.json里Jwt:Key的配置值和签发密钥相同。 - 排查时间与配置匹配问题:
- 将Token复制到本地JWT解码工具,确认
exp(过期时间)、iss(签发方)、aud(受众)字段和你代码里的配置完全匹配 - 本地开发可临时在
TokenValidationParameters中添加ClockSkew = TimeSpan.Zero关闭默认时钟偏移,排除时间差导致的验证失败
- 将Token复制到本地JWT解码工具,确认
- 如需定位具体错误原因,可添加认证失败事件输出详情:
options.Events = new JwtBearerEvents { OnAuthenticationFailed = context => { // 输出具体错误原因,比如签名无效、过期、Issuer不匹配等 Console.WriteLine($"JWT验证失败原因:{context.Exception?.Message}"); return Task.CompletedTask; } };
内容的提问来源于stack exchange,提问作者NSS
相关产品推荐
相关产品推荐

