![反向代理后面的 ADFS SSO 上的 .NET 问题](https://linux22.com/image/710874/%E5%8F%8D%E5%90%91%E4%BB%A3%E7%90%86%E5%90%8E%E9%9D%A2%E7%9A%84%20ADFS%20SSO%20%E4%B8%8A%E7%9A%84%20.NET%20%E9%97%AE%E9%A2%98.png)
我有一个使用 ADFS 进行 SSO 的 .NET 应用程序。当我在本地计算机和测试环境中测试它时,它可以正常工作,但部署到客户端环境时它会失败。
客户端环境如下:HTTPS公网IP:443 -> NAT内网IP -> 加速器:80 -> 负载均衡器:80 -> 反向代理服务器:80 -> APP服务器:80
反向代理将 URL 从 app.url.com 重写为 app-internal.url.com
该应用程序应像这样工作:
用户将访问 http s://app.url.com/appname。然后,.NET 应用程序在首次加载时会将用户重定向到 ADFS 服务器:http s://adfsurl.domain.com/adfs/ls?
身份验证成功后,ADFS 将重定向回应用程序 URL。
我的问题是应用程序正在重定向到http://app.url.com/adfs/ls/? 而不是 http s://adfsurl.domain.com/adfs/ls?
我是否需要做其他配置,例如出站规则?
答案1
您可能需要取消选择在响应标头中反向重写主机在 ARR 设置中,并在 applicationhost.config 中另外设置 retainHostHeader="true"
- 打开 Internet 信息服务 (IIS) 管理器。
- 在里面連接窗格中,选择服务器。
- 在服务器窗格中,双击应用程序请求路由缓存。
- 在里面操作窗格中,单击服务器代理设置。
- 在应用程序请求路由页面,取消选择在响应标头中反向重写主机。
要在 applicationhost.config 中设置preserveHostHeader="true":
- 以管理员身份运行命令提示符
%WINDIR%\System32\inetsrv\appcmd.exe set config -section:system.webServer/proxy /preserveHostHeader:"True" /commit:apphost
看:
https://stackoverflow.com/questions/43433352/sso-adfs-redirection-issue-with-reverse-proxy-with-arr