我在 Windows 2016 Nano 服务器托管的 IIS 中运行一个 Web 服务。如果我通过http://servername/service/health
http://[IP Address here]/service/health
但是,如果我通过或访问它http://service.company.com/service/health
,它会提示输入 AD 登录凭据。
我查看了 DNS 记录和 IIS ApplicationHost.config,但我真的不知道它出了什么问题。我可能漏掉了一两个设置。有人能知道在哪里查看或做什么吗?
答案1
这看起来像是一个 Kerberos 问题;如果我是正确的,那么服务器的 AD 计算机帐户(*) 有一个注册的 SPN HTTP/SERVERNAME
(可以使用SETSPN
命令行工具进行验证),因此当使用计算机名称调用 Web 服务时可以进行自动 Kerberos 身份验证;但是,当使用任何其他名称调用 Web 服务时,这将不起作用。
如果您希望能够使用不同的名称调用 Web 服务,则需要使用如下命令将另一个 SPN 添加到同一个 AD 计算机帐户 (*) SETSPN -S HTTP/service.company.com SERVERNAME
。
更多信息这里。
(*)或者,如果您手动配置了运行 IIS 应用程序池的用户帐户。
答案2
Service.company.com 需要在 IIS 服务器上注册为服务主体名称。
此外,默认情况下,Kerberos 集成身份验证不会与 IP 地址一起使用,除非系统配置为这样做,并且 IP 地址是注册的服务主体名称。
https://docs.microsoft.com/en-us/windows-server/security/kerberos/configuring-kerberos-over-ip
答案3
另一个检查是您的浏览器可能没有传递凭据,从而强制登录提示。
在 Internet 选项中,有一个本地 Intranet 的安全区域;此区域将自动传递您的 Windows 凭据,而无需 AD 对话框。默认设置将检测服务器名称作为网络的一部分,但完整域名可能被视为 Internet 区域并且不会发送凭据。在本地 Intranet 的配置页面中,您可以添加 FQDN 以不再提示(或通过组策略进行设置)。
这一切都假设您希望网站使用 Windows 凭据运行,并且您在内部运行;我不是安全专家,但就我个人而言,我不想将我的凭据自动发送到互联网上的网站。