平台:
使用 IIS7 这是我在两台服务器上所做的。我们希望 Kerberos 身份验证“跳”到的第一台服务器和第二台服务器。
步骤1:
对于包含您正在调用的服务的 IIS 站点(在每台服务器上),请进入 IIS 管理器,单击左侧连接下的站点,然后打开 IIS 下的“身份验证”部分。将“ASP.NET 模拟”设置为启用,将“Windows 身份验证”设置为启用。身份验证下的所有其他选项(匿名、表单等)应设置为禁用。
在“Windows 身份验证”下,右键单击并选择“提供程序”。将唯一的提供程序设置为“Negotiate:Kerberos”(这会强制使用 Kerberos。如果需要,在 Kerberos 工作后,您可以同时使用“Negotiate”和“NTLM”提供程序并删除“Negotiate:Kerberos”,以便客户端无法使用Kerberos 是否可以连接。注意:我目前将我的设置为“协商”和“NTLM”,它似乎可以工作)
在“Windows 身份验证”下,右键单击并选择“高级设置”。取消选中“启用内核模式”框。(我的扩展保护选项设置为关闭,没有尝试其他任何操作)
第2步:
对于每台服务器,您必须设置 SPN。SPN 如下(A 或 B):
A:
如果您的应用程序池在作为 DOMAIN ACCOUNT 的 IDENTITIY 下运行,请将以下 SPN 添加到域控制器上的 THAT DOMAIN ACCOUNT
http/COMPUTER_NETBIOS_NAME
http/COMPUTER_NETBIOS_NAME.FULLY_QUALIFIED_DOMAIN_NAME
http://COMPUTER_NETBIOS_NAME.FULLY_QUALIFIED_DOMAIN_NAME
(如果您没有在默认端口上运行,还添加另外 3 个附加端口名称的条目:http/COMPUTER_NETBIOS_NAME:PORT 等)
乙:
如果您的应用程序池在 IDENTITY“NetworkService”下运行,则添加与上述相同的 SPN,但将“http”替换为“HOST”,然后添加到域控制器上的 COMPUTER_NETBIOS_NAME。
我仍在努力在生产中实现这一点,但这在我的测试环境中对我有用。当我发现更多信息时,我会保持更新。
笔记:
如果您在连接时直接在 url 中使用 COMPUTER_NETBIOS_NAME,则此方法有效。如果您使用别名 (www.mysite.mydomain.com) 或直接使用 IP 地址,这将不起作用。我相信,虽然我没有完全测试过,但您必须按照上述步骤操作,但在添加 SPN 时将 COMPUTER_NETBIOS_NAME 替换为别名或 IP 地址。(或将其与 netbios 和别名/ip 一起添加,不太确定)
此外,如果您收到有关设置对集成无效的错误...在您打开“ASP.NET 模拟”之后,您可能需要添加
<validation validateIntegratedModeConfiguration="false" />
到 system.webServer 部分中的 web.config