You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.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关闭默认时钟偏移,排除时间差导致的验证失败
  • 如需定位具体错误原因,可添加认证失败事件输出详情:
options.Events = new JwtBearerEvents
{
    OnAuthenticationFailed = context =>
    {
        // 输出具体错误原因,比如签名无效、过期、Issuer不匹配等
        Console.WriteLine($"JWT验证失败原因:{context.Exception?.Message}");
        return Task.CompletedTask;
    }
};

内容的提问来源于stack exchange,提问作者NSS

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 03:33:02