集成 Windows 身份验证使用户使用其 Windows 凭据登录,并使用 Kerberos 或 NTLM 体验单一登录(SSO)。
集成 Windows 身份验证失败的原因
集成 Windows 身份验证失败的原因有三个主要原因:
- 服务主体名称(SPN)配置错误
- 通道绑定令牌
- Internet Explorer 配置
SPN 配置错误
SPN 是服务实例的唯一标识符。 Kerberos 身份验证使用 SPN 将服务实例与服务登录帐户相关联。 此配置允许客户端应用程序请求服务对帐户进行身份验证,即使客户端没有帐户名称。
下面是 SPN 如何与 AD FS 配合使用的示例:
- Web 浏览器查询 Microsoft Entra 以确定哪个服务帐户正在运行
sts.contoso.com
。 - Microsoft Entra 告知浏览器它是 AD FS 服务帐户。
- 浏览器获取 AD FS 服务帐户的 Kerberos 票证。
配置错误或错误的 SPN 的 AD FS 服务帐户可能会遇到问题。 查看网络跟踪时,可能会看到错误,例如 KRB Error: KRB5KDC_ERR_S_PRINCIPAL_UNKNOWN
。
通过使用网络跟踪(如 Wireshark),可以确定浏览器尝试解析的 SPN。 然后,可以使用命令行工具, setspn - Q \<spn>
并针对该 SPN 执行查找。 你可能找不到它,或者它可能分配给 AD FS 服务帐户以外的另一个帐户。
若要验证 SPN,请查看 AD FS 服务帐户的属性。
通道绑定令牌
目前,当客户端应用程序使用 HTTPS 通过 Kerberos、Digest 或 NTLM 向服务器进行身份验证时,首先会建立传输层安全性 (TLS) 通道。 使用此通道进行身份验证。
通道绑定令牌是受 TLS 保护的外部通道的属性。 它用于通过客户端身份验证的内部通道将外部通道绑定到会话。
如果中间人攻击发生且 SSL 流量解密并重新加密,则密钥不匹配。 AD FS 确定某个内容位于 Web 浏览器与自身之间的中间。 Kerberos 身份验证失败,并提示用户出现 401 对话框而不是 SSO 体验。
此问题可能由以下原因导致:
- 位于浏览器和 AD FS 之间的任何内容
- 琴师
- 执行安全套接字层 (SSL) 桥接的反向代理
默认情况下,AD FS 设置为 Allow
. 若要更改此设置,请使用 PowerShell cmdlet Set-ADFSProperties -ExtendedProtectionTokenCheck None
。
有关详细信息,请参阅 有关安全规划和部署 AD FS 的最佳做法。
Internet Explorer 配置
注释
如果使用 Chrome,请将其添加到 Windows 集成身份验证支持的用户代理列表中。
默认情况下,Internet Explorer 的行为方式如下:
- Internet Explorer 从 AD FS 收到 401 响应,标头中包含 NEGOTIATE 一词。 此词会告知 Web 浏览器获取 Kerberos 或 NTLM 票证以发送回 AD FS。
- 默认情况下,如果 WORD NEGOTIATE 位于标头中,Internet Explorer 会尝试执行此任务(SPNEGO),而无需用户交互。 它仅适用于 Intranet 站点。
两个主要事项可以防止这种情况发生:
Internet Explorer 属性中未选中 “启用集成 Windows 身份验证 ”复选框。 此选项位于 “安全>高级>Internet 选项”下。
未正确配置安全区域:
完全限定的域名不在 Intranet 区域中。
AD FS URL 不在 Intranet 区域中。