使用 DNS 的 IIS Windows 身份验证

使用 DNS 的 IIS Windows 身份验证

我问了这个问题已经在 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 中配置或破坏的任何内容都不需要使用旧式兼容性内容来修复它。

相关内容