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

Blazor Server应用使用OpenApiSecurityScheme授权时出现Bearer error="invalid_token"问题求助

解决Blazor Server中JWT授权返回Bearer error="invalid_token"的问题

我仔细看了你贴的Startup.cs代码,遇到的Bearer error="invalid_token"问题通常和JWT验证的配置细节、令牌本身或者请求管道有关,咱们一步步排查和修复:

1. 先确认JWT令牌的生成逻辑没问题

  • 密钥必须完全匹配:你在Startup里用Configuration.GetValue<string>("AppSettings:Secret")作为验证密钥,要确保生成JWT令牌的代码用的是同一个密钥,编码也都是UTF-8,别出现拼写错误、空格或者大小写不一致的情况。
  • 签名算法要对应:你配置的是对称密钥SymmetricSecurityKey,所以生成令牌时必须用HMAC系列算法(比如SecurityAlgorithms.HmacSha256),不能用RSA这类非对称算法,否则验证肯定失败。

2. 修复请求管道的中间件顺序和端点映射

你的Configure方法里漏掉了API端点映射,而且中间件的完整流程也不完整。Blazor Server的API请求需要通过UseEndpoints来路由到控制器,否则授权验证后没有处理请求的环节,直接导致验证失败。

你需要在Configure方法的末尾添加这段代码:

app.UseEndpoints(endpoints =>
{
    endpoints.MapControllers(); // 必须添加这个,映射你的API控制器
    endpoints.MapBlazorHub();
    endpoints.MapFallbackToPage("/_Host");
});

另外要确保中间件的顺序是正确的:
UseAuthentication() → UseAuthorization() → UseEndpoints(...),这个顺序不能乱,否则授权逻辑不会生效。

3. 添加调试日志定位具体错误

可以在AddJwtBearer的配置里添加事件监听,这样能看到验证失败的具体原因,比如令牌过期、签名错误还是其他问题:

.AddJwtBearer(x => {
    x.RequireHttpsMetadata = false;
    x.SaveToken = true;
    x.TokenValidationParameters = new TokenValidationParameters {
        ValidateIssuerSigningKey = true,
        IssuerSigningKey = new SymmetricSecurityKey(key),
        ValidateIssuer = false,
        ValidateAudience = false
    };
    // 添加调试事件
    x.Events = new JwtBearerEvents
    {
        OnAuthenticationFailed = context =>
        {
            Console.WriteLine($"验证失败详情: {context.Exception.Message}");
            // 如果是生产环境,建议用日志框架记录,比如ILogger
            return Task.CompletedTask;
        },
        OnTokenValidated = context =>
        {
            Console.WriteLine("令牌验证成功");
            return Task.CompletedTask;
        }
    };
})

运行后看控制台输出,就能精准定位问题了。

4. 检查Swagger的令牌使用方式

在SwaggerUI里测试时,要确保输入的令牌格式正确:必须是Bearer {你的令牌内容},注意Bearer和令牌之间有一个空格。如果格式错了,也会返回invalid_token。

5. 确认密钥长度足够

对称密钥的长度不能太短,HmacSha256算法推荐至少32位(256位)的密钥,否则会因为熵不足导致验证失败。检查你的appsettings.json里的AppSettings:Secret,比如:

{
  "AppSettings": {
    "Secret": "this-is-a-32-character-long-secret-key-123"
  }
}

按照上面的步骤排查,基本能解决invalid_token的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 05:07:55