【发布时间】:2016-10-24 15:33:55
【问题描述】:
我有一个使用 Windows 身份验证的 Intranet 网站。通过 AJAX,它使用同一域中的 Web 服务,该域也使用 Windows 身份验证。我仅将 ARR 用作反向代理(无负载平衡),我正在尝试将 Windows 身份验证传递给 Web 服务
反向代理适用于基本身份验证,但不适用于 Windows 身份验证。
我的物理设置是一台 Windows 2008 R2 服务器,网站、Web API 服务和 ARR 都在同一台服务器上。我没有在 Server Farm 下添加任何东西,因为所有东西都在同一台机器上。
我已将网站和 Web API 服务设置为仅 Windows 身份验证,并将服务器和默认网站设置为仅允许匿名(有几篇文章说 ARR 必须使用匿名)。我在设置了 Windows 身份验证的站点 IIS 配置中设置了 useAppPoolCredentials=true。
我尝试将身份验证提供程序限制为仅 NTLM 以避免 Kerberos/SPN 复杂性,并且我还尝试包括 Negotiate 以便使用 Kerberos。
对于 Kerberos,我使用 ARR、外部网站和内部 Web 服务用作应用程序池标识的单个域帐户为服务器 NetBIOS 和 FQDN 以及网站和 Web 服务 FQDM 设置了 SPN。 (例如:setspn -s HTTP/域/帐户)
我可以直接浏览到内部 Web 服务,并且我的 Windows 身份验证成功,但如果我使用该网站,对 Web 服务的重写请求会收到 401.1 错误。在 Fiddler 中,我可以看到从浏览器到外部网站的三个请求。最后两个在标题中有我的 Windows 身份验证。在服务器上,内部 Web 服务的 IIS 日志没有显示有关请求的 Windows 帐户信息。
为什么 ARR 无法将我的 Windows 凭据传递给服务?
【问题讨论】:
标签: authentication iis arr