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
相关产品推荐
相关产品推荐

