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

Identity Server4发现端点通过HTTPS访问却返回HTTP链接问题排查

问题根因

当站点部署在反向代理和负载均衡后,ASP.NET Core默认接收的是Nginx转发过来的内网HTTP请求,即便用户端是HTTPS访问,程序没有正确识别原始请求的协议与域名,导致Identity Server4生成发现端点链接时使用了内部HTTP协议。

修复步骤
  • 第一步:确认反向代理层头透传配置
    首先确保负载均衡、Nginx两层都正确转发原始请求信息,Nginx的对应站点location配置中需添加如下规则:

    proxy_set_header X-Forwarded-For $remote_addr;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_set_header X-Forwarded-Host $host;
    

    若前端负载均衡是独立服务,也需要配置相同的头透传规则,确保X-Forwarded系列头可以从用户端完整透传到.NET Core应用。

  • 第二步:配置.NET Core转发头中间件
    注意中间件注册顺序必须放在所有其他中间件之前,否则配置不生效

    1. 在ConfigureServices方法中添加转发头配置:
    services.Configure<ForwardedHeadersOptions>(options =>
    {
        options.ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto | ForwardedHeaders.XForwardedHost;
        // 可选:添加你的反向代理内网IP到信任列表,避免请求头伪造风险
        options.KnownProxies.Add(IPAddress.Parse("你的Nginx/负载均衡内网IP"));
    });
    
    1. 在Configure方法的第一行注册转发头中间件:
    public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
    {
        // 必须放在最顶部,优先处理转发头
        app.UseForwardedHeaders();
    
        // 后续原有中间件,比如UseRouting、UseAuthentication、UseIdentityServer等
        // ...
    }
    
  • 第三步:添加Identity Server4专属配置
    若完成上述两步后问题仍存在,可直接强制指定IS4的公共访问域名,优先级最高:

    services.AddIdentityServer(options =>
    {
        // 替换为你的线上正式访问域名,带HTTPS协议
        options.PublicOrigin = "https://你的正式站点域名";
        // 可选:若需要固定签发者标识,也可配置IssuerUri
        // options.IssuerUri = "https://你的正式站点域名";
    })
    // 你原有IS4的其他配置,比如AddInMemoryIdentityResources、AddAspNetIdentity等
    // ...
    
验证方式

部署生效后访问/.well-known/openid-configuration发现端点,检查返回内容中的issuer、authorization_endpoint等字段前缀是否已经替换为HTTPS协议的正式域名。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 13:00:02