我问了这个问题已经在 Stackoverflow 上,但我意识到这也许是一个更好的发布地点。
我在 Windows Server 2016 上使用 IIS 10。
我已成功将 IIS 配置为在访问网站时使用 Windows 身份验证。使用服务器的 IP 地址或主机名时,此方法效果很好。
但是,我将在同一台服务器上托管多个站点,因此我尝试配置一些 DNS 记录以指向服务器的 IP(A records
),并通过在该站点的 IIS 绑定中定义主机名,我已设法在浏览器中使用该名称正确连接到正确的站点。
但出于某种原因,这会破坏 Windows 身份验证。当将用户名和密码输入浏览器登录框时,它只是验证失败。
我读过这个答案,但它没有提供解决方案(https://stackoverflow.com/questions/15366649/iis-windows-authentication-weirdness)
我尝试用不同的方式写用户名:
username
domain\username
domain.local\username
但这并没有什么区别。
我在看这一页但似乎不适用。
有人建议我尝试使用以下命令关闭 IIS 管理库中的反向 DNS 检查:adsutil set w3svc/EnableReverseDNS FALSE
。为了做到这一点,我必须添加角色 IIS 6 管理兼容性。
有人知道怎样让它工作吗?
答案1
根据您发布的用户名语法,我假定它是域成员。
如果您使用了 A 记录,为了使 Kerberos 身份验证成功,您需要为每个名称定义一个服务主体名称,该名称由目标站点的进程标识拥有。(如果您将其保留为默认的 ApplicationPoolIdentity、LocalService、NetworkService 或 Local System,则该名称将是计算机帐户。)
不过,有一个副作用您可以利用来测试该理论,即 IE 将 CNAME 执行到 A 记录解析并查询已解析目标名称的 SPN...
因此,如果你有 fakehost.mydomain 作为别名记录对于 MACHINENAME,IE 将解析 MACHINENAME,然后使用 HTTP/MACHINENAME 作为它正在查找的 SPN - 这意味着您不必创建任何其他 SPN。只要所有站点的身份都是机器,这就可以正常工作。
现在,奇怪的是 Kerb 身份验证不应该是唯一的选择,而且我感兴趣的是,当 Kerb 无法检索票证时,NTLM 回退根本不起作用,因此这里可能存在一些其他设置或复杂性使事情变得复杂。我猜这就是扩展保护可能存在问题的地方。或者,作为故障排除/设置的一部分,身份验证设置不再是协商(这意味着如果 Kerb 失败,则使用 Kerb 和 NTLM)。
最后,带点主机名的奇妙之处在于它们倾向于调用代理 - 如果您在 IE 中定义了代理,请禁用它以进行测试。
最后,它不太可能与 IIS 的 DNS 视图相关,因此您可以卸载 IIS 管理 6 内容 - 您在 IIS 中配置或破坏的任何内容都不需要使用旧式兼容性内容来修复它。