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

.NET 6 React模板搭配Identity Server报错:Bearer令牌颁发者无效

报错根因

这个错误是JWT令牌签发方(issuer)校验不匹配导致的:Identity Server给前端签发令牌时填入的issuer标识,和后端API接口校验JWT时预期的issuer值不一致,触发校验失败。

排查步骤
  • 确认Identity Server实际签发的issuer:直接访问https://localhost:44449/.well-known/openid-configuration端点,查看返回结果中的issuer字段实际值
  • 确认后端API的校验规则:检查Program.cs中JWT Bearer认证的配置,核对ValidIssuer(预期合法issuer)、ValidateIssuer(是否开启issuer校验)的配置项
  • 确认令牌实际携带的issuer:复制前端请求头里的Bearer令牌,到jwt.io解析payload,查看iss字段的值,和前两步的结果做对比
对应解决方案

方案1:显式固定Identity Server的Issuer

本地调试端口变化、或者反向代理导致Identity Server自动识别的域名/端口不符时,直接显式指定固定issuer即可,修改Program.cs的Identity Server配置:

builder.Services.AddIdentityServer(options =>
{
    // 此处值要和后续API校验的ValidIssuer完全一致
    options.IssuerUri = "https://localhost:44449";
})
.AddApiAuthorization<ApplicationUser, ApplicationDbContext>();

方案2:统一API端的issuer校验配置

确保API侧配置的预期合法issuer和Identity Server实际签发的issuer完全匹配:

builder.Services.AddAuthentication("Bearer")
    .AddJwtBearer(options =>
    {
        options.Authority = "https://localhost:44449";
        options.TokenValidationParameters.ValidateIssuer = true;
        // 此处值和Identity Server的IssuerUri保持一致
        options.TokenValidationParameters.ValidIssuer = "https://localhost:44449";
    });

方案3:临时关闭issuer校验(仅本地调试使用,禁止生产环境使用)

如果是临时本地调试,不需要严格校验issuer,可以直接关闭校验逻辑:

builder.Services.AddAuthentication("Bearer")
    .AddJwtBearer(options =>
    {
        options.TokenValidationParameters.ValidateIssuer = false;
    });

方案4:修复反向代理场景的请求头识别

如果使用了IIS、Nginx反向代理或者前端开发代理,需要配置转发头让Identity Server正确获取原始请求的域名、端口:

// 注册转发头配置
builder.Services.Configure<ForwardedHeadersOptions>(options =>
{
    options.ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto;
});

// 中间件要放在所有处理请求的中间件最前面
app.UseForwardedHeaders();

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 19:45:05