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

反向代理子路径部署时IdentityServer4 AddLocalApiAuthentication issuer uri异常

问题根因

该报错是因为IdentityServer本地API的JWT校验逻辑默认未正确获取到带反向代理子路径的颁发者(Issuer)值,同代理下外部API校验正常是因为你在外部API配置时主动指定了带子路径的Authority地址,校验时会自动从IdentityServer的发现接口拉取正确的Issuer配置,而本地API的校验默认直接取当前请求的域名作为ValidIssuer,未拼接子路径。

解决方案

你可以按优先级选择以下两种方案修复,不需要硬编码ValidIssuer的方案更推荐:

方案1:配置转发头与站点基础路径(无硬编码,优先推荐)

反向代理场景下首先要确保IdentityServer服务能正确拿到公网访问的请求信息,配置步骤如下:

  1. 确保反向代理已配置转发以下请求头:X-Forwarded-Proto、X-Forwarded-Host、X-Forwarded-PathBase
  2. 在服务启动配置的最开头添加转发头与子路径配置:
    // 注册转发头配置
    builder.Services.Configure<ForwardedHeadersOptions>(options =>
    {
        options.ForwardedHeaders = ForwardedHeaders.All;
        // 填入你的反向代理内网IP,避免伪造转发头风险
        options.KnownProxies.Add(IPAddress.Parse("192.168.x.x"));
    });
    
    var app = builder.Build();
    
    // 管道最开头注册转发中间件
    app.UseForwardedHeaders();
    // 指定站点的基础子路径
    app.UsePathBase("/subpath");
    
    // 后续其他中间件配置(UseRouting、UseAuthentication、UseAuthorization等)
    
  3. IdentityServer注册时可显式指定正确的颁发者地址,避免自动推断异常:
    builder.Services.AddIdentityServer(options =>
    {
        options.IssuerUri = "https://example.com/subpath";
        // 其他IdentityServer配置
    })
    

方案2:手动指定本地API的ValidIssuer

如果你不想改全局转发配置,也可以直接在本地API的校验配置中指定合法颁发者:

builder.Services.AddLocalApi(options =>
{
    options.ValidIssuer = "https://example.com/subpath";
});

校验验证

你可以把请求携带的JWT令牌复制到JWT解码工具中查看iss字段值,确保该值和你配置的ValidIssuer完全一致即可解决校验报错。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 18:15:04