AD FS 故障排除:集成 Windows 身份验证

集成 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 服务帐户的属性。

显示“A D F S 服务帐户属性”对话框的“属性编辑器”选项卡的屏幕截图,其中显示了所调用的服务主体名称值。

通道绑定令牌

目前,当客户端应用程序使用 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 选项”下。

    显示“Internet 选项”对话框的“高级”选项卡的屏幕截图,其中选择了“启用集成 Windows 身份验证”选项。

  • 未正确配置安全区域:

    • 完全限定的域名不在 Intranet 区域中。

    • AD FS URL 不在 Intranet 区域中。

      显示 Internet 选项对话框前面的“本地 Intranet”窗口的屏幕截图。