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

IdentityServer4负载均衡下将发现页面HTTP URL转为HTTPS的优雅方案

解决IdentityServer4负载均衡后发现页面URL转HTTPS的优雅方案

我来给你分享最靠谱也最优雅的解决思路,这也是IdentityServer官方推荐的适配负载均衡场景的做法:

1. 配置ForwardedHeaders中间件识别转发请求

负载均衡器会把原始的HTTPS请求转发给后端的IdentityServer(HTTP协议),同时会通过X-Forwarded-Proto、X-Forwarded-For这类请求头传递原始请求的协议、客户端IP等信息。我们需要让IdentityServer识别这些头,这样它才能知道原始请求是HTTPS的。

在Startup.cs的ConfigureServices方法里添加配置:

services.Configure<ForwardedHeadersOptions>(options =>
{
    // 开启转发协议和客户端IP的识别
    options.ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto;
    // 这里一定要添加你的负载均衡器的IP/网段,防止恶意请求伪造转发头
    options.KnownProxies.Add(IPAddress.Parse("192.168.1.100")); // 替换成你的负载均衡器IP
    // 如果是云厂商的负载均衡(比如AWS ALB、Azure LB),可以用网段配置更灵活
    // options.KnownNetworks.Add(new IPNetwork(IPAddress.Parse("10.0.0.0"), 24));
});

然后在Configure方法里,必须把这个中间件放在所有其他中间件之前,尤其是IdentityServer中间件:

public void Configure(IApplicationBuilder app)
{
    // 先处理转发头
    app.UseForwardedHeaders();

    // 再启动IdentityServer
    app.UseIdentityServer();

    // 其他中间件...
    app.UseRouting();
    app.UseAuthorization();
    // ...
}

2. 指定IdentityServer的公共Origin地址

为了彻底确保发现文档(.well-known/openid-configuration)里的所有URL都是HTTPS格式,我们可以直接给IdentityServer配置对外的公共地址。

在ConfigureServices配置IdentityServer的时候,设置PublicOrigin:

services.AddIdentityServer(options =>
{
    // 替换成你的负载均衡对外的HTTPS域名
    options.PublicOrigin = "https://your-app-domain.com";
})
.AddInMemoryClients(Config.Clients)
.AddInMemoryIdentityResources(Config.IdentityResources)
.AddInMemoryApiScopes(Config.ApiScopes)
.AddAspNetIdentity<ApplicationUser>();

如果不想硬编码,也可以从配置文件(比如appsettings.json)读取:

// 先注入IConfiguration
public Startup(IConfiguration configuration)
{
    Configuration = configuration;
}

public IConfiguration Configuration { get; }

// 然后在AddIdentityServer里配置
services.AddIdentityServer(options =>
{
    options.PublicOrigin = Configuration["IdentityServer:PublicOrigin"];
})
// ...其他配置

为什么这是最优雅的方案?

这两种配置结合起来,既让IdentityServer能正确感知原始请求的协议(通过转发头),又直接指定了对外的公共地址,确保生成的所有端点URL都是HTTPS格式。完全符合IdentityServer的设计规范,没有hack式的修改,也能适配各种负载均衡场景(云厂商LB、自建LB都适用)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 07:47:59