我有一个企业域中的网站,只要用于访问它的 DNS 属于 AD FQDN,就可以使用 IE 和 Chrome 的 Kerberos 自动登录进行身份验证
AD 域不是公共域,在这个例子中,我们将其称为公司内部网. 标准 SPN 配置了 IIS 域用户帐户,例如HTTP/somesite.company.internal.corp.net mycompany\svc_iis,并且 IE 配置为将此站点视为内部网站(允许自动登录)
FQ AD Domain: company.internal.corp.net
NETBIOS domain name: MYCOMPANY
DNS for my website: somesite.company.internal.corp.net
IIS App Pool account: MYCOMPANY\svc_iis
SPN: HTTP/somesite.company.internal.corp.net MYCOMPANY\svc_iis
我已决定将此网站的 DNS 更改为其他名称somesite.mycompanypublic.com为了利用我的公共证书上的 SSL 认证链。 我不打算让该网站可供外部访问。 DNS 记录将指向同一台服务器,仅用于内部解析和访问,并且 IE 配置为将此站点视为内联网站点(允许自动登录)。所以现在我有这样的设置:
FQ AD Domain: company.internal.corp.net
NETBIOS domain name: MYCOMPANY
DNS for my website: somesite.mycompanypublic.com <-- new DNS name, not same as AD domain
IIS App Pool account: MYCOMPANY\svc_iis
SPN: HTTP/somesite.mycompanypublic.com MYCOMPANY\svc_iis <-- new DNS name, not same as AD domain
使用此新配置,DNS 服务名称不再与 AD 域名匹配,但我不清楚这是否重要
按照上述配置后,Kerberos 不再起作用。IE 提示输入 NTLM 的用户名/密码,chrome 有时会提示,但通常只会显示失败页面。Fiddler 跟踪显示 Kerberos 票证通过,但服务器每次都会拒绝,每次都会出现另一个 401。IE是配置为将此站点视为内部网站点(允许自动登录),所以这不是问题 - 我看到票证已通过。
此配置是否受支持?故障排除思路?
它的行为就像 SPN 配置不正确一样。如果需要,我可以提供 fiddler 跟踪或 wireshark caps。
答案1
SPN 不需要与 AD 域匹配。您需要有一个与用于连接的名称匹配的 SPN。我不确定您所说的“Kerberos 票证传递”是什么意思。如果将 Kerberos 凭据传递给服务器,则 HTTP 授权标头应以“协商 Y”开头。
可能最快的做法是设置 DelegConfig 工具并使用报告/向导来测试您的配置。
http://blogs.msdn.com/b/chaun/archive/2013/09/15/some-tips-on-setting-up-the-delegconfig-tool.aspx
ASP.NET 疑难解答
http://support.microsoft.com/kb/891032
答案2
该问题与域名不同毫无关系。您可以使用任何域,只要正确配置 IE 即可传递票证,并且正确配置 AD 中的 SPN。Greg 的回答为我提供了几个链接,如果您来这里解决 SPN 问题,我鼓励您探索这些链接。
我发现我需要禁用内核模式身份验证,这也要求我解锁该配置部分。我还发现,如果站点的 DNS 条目是 CNAME,则 Internet Explorer(但不是 Chrome)将在创建 SPN 票证时使用 CNAME 指向的主机的名称。
我必须配置服务器才能使用应用程序池凭据
<system.webServer>
<security>
<authentication>
<windowsAuthentication enabled="true" useAppPoolCredentials="true" />
</authentication>
</security>
</system.webServer>
但为了改变该配置块,需要执行以下操作:
一位同事向我指出了 IIS 管理器根(计算机)级别的“功能委派”图标(谢谢,Ryan)。单击“功能委派”页面会显示功能列表及其当前的覆盖设置。除少数例外,每个功能都可以更改为读/写、只读或未委派