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

IIS部署IdentityServer4端点返回HTTP而非HTTPS问题咨询

问题原因

SSL卸载确实是该问题的直接诱因:IIS完成HTTPS解密后,向后端IdentityServer4服务转发的是HTTP协议请求,默认情况下IdentityServer4会直接读取当前请求的Scheme生成发现文档的端点地址,才会出现所有端点都是HTTP的情况。你当前配置的ForwardedHeaders中间件未生效,基本是配置顺序、权限或IIS侧未同步配置导致的。

可行解决方案

方案1:补全ForwardedHeaders配置(依赖转发头)

  • 首先调整中间件顺序,UseForwardedHeaders必须放在整个中间件管道的最开头,早于UseIdentityServer、UseRouting、UseAuthorization等所有中间件,顺序错误会完全不生效。
  • 补全代理信任配置,默认中间件只信任环回地址,若IIS和后端服务部署在不同机器,需要显式添加IIS的内网IP到信任列表:
// 放在Program.cs/Startup.cs的所有app.xxx配置的最前面
app.UseForwardedHeaders(new ForwardedHeadersOptions
{
    ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto,
    // 替换为你的IIS服务器内网IP,多个代理就加多条
    KnownProxies = { IPAddress.Parse("192.168.1.100") }
});
  • IIS侧需要配置转发X-Forwarded-Proto头:先安装ARR和URL重写模块,然后在站点的web.config的<system.webServer>节点下添加如下配置,同时要在IIS的URL重写模块的「服务器变量」设置中,将HTTP_X_FORWARDED_PROTO添加到允许列表:
<rewrite>
  <rules>
    <rule name="转发HTTPS协议标识" enabled="true">
      <match url="(.*)" />
      <serverVariables>
        <set name="HTTP_X_FORWARDED_PROTO" value="https" />
      </serverVariables>
      <action type="None" />
    </rule>
  </rules>
</rewrite>

方案2:硬编码公共Origin(兜底方案,100%生效)

如果不想依赖转发头配置,可以直接在IdentityServer注册时强制指定对外访问的HTTPS域名,生成发现文档时会直接用该地址作为前缀:

builder.Services.AddIdentityServer(options =>
{
    // 替换为你的对外服务的完整HTTPS域名,不需要加后缀路径
    options.PublicOrigin = "https://auth.yourdomain.com";
})
// 其余原有配置保持不变

验证方式

配置完成后访问/.well-known/openid-configuration路径,检查返回内容中的issuer字段以及所有endpoint字段,确认已经变为HTTPS协议开头即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 09:39:03