登录 Microsoft 365、Azure 或 Intune 期间,系统会反复提示联合用户输入凭据

重要

本文包含的信息介绍如何帮助降低安全设置或关闭计算机上的安全功能。 可以进行这些更改来解决特定问题。 在进行这些更改之前,建议评估与在特定环境中实现此解决方法相关的风险。 如果实现此解决方法,请执行任何适当的附加步骤来帮助保护计算机。

问题

当用户在登录到 Microsoft 365、Microsoft Azure 或 Microsoft Intune 等 Microsoft 云服务期间尝试向 Active Directory 联合身份验证服务 (AD FS) 服务终结点进行身份验证时,系统会反复提示联合用户输入凭据。 当用户取消时,用户会收到 “拒绝访问 ”错误消息。

原因

该症状指示使用 AD FS 进行 Windows 集成身份验证时出现问题。 如果满足以下一个或多个条件,则可能会出现此问题:

  • 使用了不正确的用户名或密码。

  • Internet Information Services (IIS) 身份验证设置在 AD FS 中设置不正确。

  • 与用于运行 AD FS 联合服务器场的服务帐户关联的服务主体名称 (SPN) 丢失或损坏。

    注意

    仅当 AD FS 作为联合服务器场实现,而不是在独立配置中实现时,才会发生这种情况。

  • 以下一个或多个由身份验证扩展保护标识为中间人攻击的来源:

    • 某些第三方 Internet 浏览器
    • 企业网络防火墙、网络负载均衡器或其他网络设备正在以可能重写 IP 有效负载数据的方式将 AD FS 联合身份验证服务发布到 Internet。 这可能包括以下类型的数据:
      • 安全套接字层 (SSL) 桥接

      • SSL 卸载

      • 有状态数据包筛选

        有关更多信息,请参阅以下 Microsoft 知识库文章:

        2510193使用 AD FS 在 Microsoft 365、Azure 或 Intune 中设置单一登录的支持方案

    • 监视或 SSL 解密应用程序已安装或在客户端计算机上处于活动状态
  • 域名系统 (DNS) AD FS 服务终结点的解析是通过 CNAME 记录查找而不是通过 A 记录查找执行的。

  • Windows Internet Explorer 未配置为将 Windows 集成身份验证传递给 AD FS 服务器。

开始故障排除之前

检查用户名和密码是否不是问题的原因。

  • 请确保使用正确的用户名,并且用户主体名称 (UPN) 格式。 例如,johnsmith@contoso.com。

  • 请确保使用正确的密码。 若要双重检查使用正确的密码,可能需要重置用户密码。 有关详细信息,请参阅以下 Microsoft TechNet 文章:

    重置用户密码

  • 确保帐户未在指定的登录时间之外被锁定、过期或使用。 有关详细信息,请参阅以下 Microsoft TechNet 文章: 管理用户

验证原因

若要检查导致此问题的 Kerberos 问题,请在 AD FS 联合服务器场上启用基于表单的身份验证,暂时绕过 Kerberos 身份验证。 为此,请按照下列步骤操作:

步骤 1:编辑 AD FS 联合服务器场中每台服务器上的 web.config 文件

  1. 在 Windows 资源管理器中,找到 C:\inetpub\adfs\ls\ 文件夹,然后创建 web.config 文件的备份副本。

  2. 依次单击“ 开始”、“ 所有程序”、“ 附件”、“记 事本”和“ 以管理员身份运行”。

  3. 在“文件”菜单上单击“打开”。 在“ 文件名 ”框中,键入 C:\inetpub\adfs\ls\web.config,然后单击“ 打开”。

  4. 在 web.config 文件中,执行以下步骤:

    1. 找到包含身份验证模式>的<行,然后将其更改为<身份验证模式=“Forms”/>。

    2. 找到以 <localAuthenticationTypes> 开头的部分,然后更改该部分,<以便首先列出 add name=“Forms”>条目,如下所示:

      <localAuthenticationTypes>
      <add name="Forms" page="FormsSignIn.aspx" />
      <add name="Integrated" page="auth/integrated/" />
      <add name="TlsClient" page="auth/sslclient/" />
      <add name="Basic" page="auth/basic/" />
      
  5. 在“文件”菜单上,单击“保存”

  6. 在提升的命令提示符下,使用 iisreset 命令重启 IIS。

步骤 2:测试 AD FS 功能

  1. 在连接到本地 AD DS 环境并经过身份验证的客户端计算机上,登录到云服务门户。

    应体验基于表单的登录,而不是无缝身份验证体验。 如果使用基于表单的身份验证成功登录,则确认 AD FS 联合身份验证服务中存在 Kerberos 问题。

  2. 在按照“解决方法”部分中的步骤操作之前,将 AD FS 联合服务器场中每台服务器的配置还原为以前的身份验证设置。 若要还原 AD FS 联合服务器场中每个服务器的配置,请执行以下步骤:

    1. 在 Windows 资源管理器中,找到 C:\inetpub\adfs\ls\ 文件夹,然后删除 web.config 文件。
    2. 将“步骤 1:编辑 AD FS 联合服务器场中每台服务器上的 web.config 文件”部分中创建的 web.config 文件的备份移动到 C:\inetpub\adfs\ls\ 文件夹。
  3. 在提升的命令提示符下,使用 iisreset 命令重启 IIS。

  4. 检查 AD FS 身份验证行为是否还原为原始问题。

解决方案

若要解决限制 AD FS 身份验证的 Kerberos 问题,请根据情况使用以下一种或多种方法。

解决方法 1:将 AD FS 身份验证设置重置为默认值

如果 AD FS IIS 身份验证设置不正确,或者 AD FS 联合身份验证服务和代理服务的 IIS 身份验证设置不匹配,一种解决方案是将所有 IIS 身份验证设置重置为默认 AD FS 设置。

下表中列出了默认身份验证设置。

虚拟应用程序 身份验证级别 ()
默认网站/adfs 匿名身份验证
默认网站/adfs/ls 匿名身份验证,Windows 身份验证

在每个 AD FS 联合服务器和每个 AD FS 联合服务器代理上,使用以下 Microsoft TechNet 文章中的信息将 AD FS IIS 虚拟应用程序重置为默认身份验证设置:

在 IIS 7 中配置身份验证

解决方法 2:更正 AD FS 联合服务器场 SPN

注意

仅当 AD FS 作为联合服务器场实现时,才尝试此解决方法。 请勿在 AD FS 独立配置中尝试此解决方法。

若要解决 AD FS 服务帐户上 AD FS 服务的 SPN 丢失或损坏的问题,请在 AD FS 联合服务器场中的一台服务器上执行以下步骤:

  1. 打开“服务管理”管理单元。 为此,依次单击“ 开始”、“ 所有程序”、“ 管理工具”和“ 服务”。

  2. 双击“ AD FS (2.0) Windows 服务”。

  3. 在“ 登录 ”选项卡上,记下 “此帐户”中显示的服务帐户。

  4. 依次单击“开始”、“所有程序”、“附件”、“命令提示符”和“以管理员身份运行”。

  5. 键入以下命令,然后按 Enter 键。

    SetSPN –f –q host/<AD FS service name>
    

    注意

    在此命令中, <AD FS 服务名称> 表示完全限定的域名 (FQDN) AD FS 服务终结点的服务名称。 它不表示 AD FS 服务器的 Windows 主机名。

    • 如果为命令返回了多个条目,并且结果与步骤 3 中记入的用户帐户相关联,请删除该关联。 为此,请运行下列命令:

      SetSPN –d host/<AD FS service name><bad_username>
      
    • 如果为命令返回多个条目,并且 SPN 使用的名称与 Windows 中 AD FS 服务器的计算机名称相同,则 AD FS 的联合终结点名称不正确。 必须再次实现 AD FS。 AD FS 联合服务器场的 FQDN 不能与现有服务器的 Windows 主机名相同。

    • 如果 SPN 尚不存在,请运行以下命令:

      SetSPN –a host/<AD FS service name><username of service account>  
      

      注意

      在此命令中, <服务帐户> 的用户名表示步骤 3 中记下的用户名。

  6. 在 AD FS 联合服务器场中的所有服务器上执行这些步骤后,右键单击“服务管理”管理单元中的 “AD FS (2.0) Windows 服务 ”,然后单击“ 重启”。

解决方法 3:解决针对身份验证的扩展保护问题

若要在身份验证的扩展保护阻止成功的身份验证时解决此问题,请使用以下建议方法之一:

  • 方法 1:使用 Windows Internet Explorer 8 (或更高版本的程序) 登录。
  • 方法 2:以 SSL 桥接、SSL 卸载或有状态数据包筛选不重写 IP 有效负载数据的方式将 AD FS 服务发布到 Internet。 为此,最佳做法建议是使用 AD FS 代理服务器。
  • 方法 3:关闭或禁用监视或 SSL 解密应用程序。

如果无法使用上述任何方法,若要解决此问题,可以为被动客户端和主动客户端禁用对身份验证的扩展保护。

解决方法:禁用对身份验证的扩展保护

警告

建议不要将此过程用作长期解决方案。 禁用针对身份验证的扩展保护会削弱 AD FS 服务的安全配置文件,方法是不检测集成 Windows 身份验证终结点上的某些中间人攻击。

注意

当此解决方法应用于第三方应用程序功能时,还应卸载客户端操作系统上的修补程序,以便进行扩展身份验证保护。

对于被动客户端

若要为被动客户端禁用对身份验证的扩展保护,请在 AD FS 联合服务器场中的所有服务器上对以下 IIS 虚拟应用程序执行以下过程:

  • 默认网站/adfs
  • 默认网站/adfs/ls

为此,请按照下列步骤操作:

  1. 打开 IIS 管理器并导航到要管理的级别。 有关打开 IIS 管理器的信息,请参阅 打开 IIS 管理器 (IIS 7)
  2. 在“功能视图”中,双击“ 身份验证”。
  3. 在“身份验证”页上,选择“ Windows 身份验证”。
  4. “操作 ”窗格中,单击“ 高级设置”。
  5. 出现“高级设置”对话框时,从“扩展保护”下拉菜单中选择“关闭”。

对于活动客户端

若要为活动客户端禁用对身份验证的扩展保护,请在主 AD FS 服务器上执行以下过程:

  1. 打开 Windows PowerShell。

  2. 运行以下命令以加载 AD FS 管理单元的Windows PowerShell:

    Add-PsSnapIn Microsoft.Adfs.Powershell
    
  3. 运行以下命令,禁用身份验证的扩展保护:

    Set-ADFSProperties –ExtendedProtectionTokenCheck "None"
    

重新为身份验证启用扩展保护

对于被动客户端

若要为被动客户端重新启用身份验证扩展保护,请在 AD FS 联合服务器场中的所有服务器上对以下 IIS 虚拟应用程序执行以下过程:

  • 默认网站/adfs
  • 默认网站/adfs/ls

为此,请按照下列步骤操作:

  1. 打开 IIS 管理器并导航到要管理的级别。 有关打开 IIS 管理器的信息,请参阅 打开 IIS 管理器 (IIS 7)
  2. 在“功能视图”中,双击“ 身份验证”。
  3. 在“身份验证”页上,选择“ Windows 身份验证”。
  4. “操作 ”窗格中,单击“ 高级设置”。
  5. 出现“高级设置”对话框时,从“扩展保护”下拉菜单中选择“接受”。

对于活动客户端

若要为活动客户端重新启用身份验证扩展保护,请在主 AD FS 服务器上执行以下过程:

  1. 打开 Windows PowerShell。

  2. 运行以下命令以加载 AD FS 管理单元的Windows PowerShell:

    Add-PsSnapIn Microsoft.Adfs.Powershell
    
  3. 运行以下命令,为身份验证启用扩展保护:

    Set-ADFSProperties –ExtendedProtectionTokenCheck "Allow"
    

解决方法 4:将 CNAME 记录替换为 AD FS 的 A 记录

使用 DNS 管理工具将用于联合身份验证服务的每个 DNS 别名 (CNAME) 记录替换为 DNS 地址 (A) 记录。 此外,在实现拆分式 DNS 配置时,检查或考虑公司 DNS 设置。 有关如何管理 DNS 记录的详细信息,请参阅 管理 DNS 记录

解决方法 5:将 Internet Explorer 设置为 AD FS 客户端,用于单一登录 (SSO)

有关如何为 AD FS 访问设置 Internet Explorer 的详细信息,请参阅 意外提示联合用户输入工作或学校帐户凭据

更多信息

为了帮助保护网络,AD FS 使用扩展保护进行身份验证。 针对身份验证的扩展保护有助于防止中间人攻击,攻击者在此类攻击中拦截客户端凭据并将其转发到服务器。 通过使用通道绑定工作 (CBT) ,可以防范此类攻击。 与客户端建立通信时,服务器可能要求、允许或不需要 CBT。

ExtendedProtectionTokenCheck AD FS 设置指定联合服务器支持的身份验证扩展保护级别。 以下是此设置的可用值:

  • 要求:服务器已完全强化。 强制实施扩展保护。
  • 允许:这是默认设置。 服务器已部分强化。 对已更改以支持此功能的涉及的系统强制实施扩展保护。
  • :服务器易受攻击。 未强制实施扩展保护。

下表介绍了身份验证如何针对三个操作系统和浏览器进行操作,具体取决于使用 IIS 的 AD FS 提供的不同扩展保护选项。

注意

Windows 客户端操作系统必须安装特定的更新才能有效使用扩展保护功能。 默认情况下,这些功能在 AD FS 中启用。

默认情况下,Windows 7 包含适当的二进制文件以使用扩展保护。

Windows 7 (或适当更新的 Windows Vista 或 Windows XP)

Setting 需要 允许 (默认) None
Windows Communication Foundation (WCF) 客户端 (所有终结点) 工程 工程 工程
Internet Explorer 8 及更高版本 工程 工程 工程
Firefox 3.6 失败 失败 工程
Safari 4.0.4 失败 失败 工程

没有适当更新的 Windows Vista

Setting 需要 允许 (默认) None
WCF 客户端 (所有终结点) 失败 工程 工程
Internet Explorer 8 及更高版本 工程 工程 工程
Firefox 3.6 失败 工程 工程
Safari 4.0.4 失败 工程 工程

没有适当更新的 Windows XP

Setting 需要 允许 (默认) None
Internet Explorer 8 及更高版本 工程 工程 工程
Firefox 3.6 失败 工程 工程
Safari 4.0.4 失败 工程 工程

有关身份验证扩展保护的详细信息,请参阅以下 Microsoft 资源:

为 AD FS 2.0 配置高级选项

有关 Set-ADFSProperties cmdlet 的详细信息,请转到以下 Microsoft 网站:

Set-ADFSProperties

仍然需要帮助? 转到 Microsoft 社区Microsoft Entra论坛网站。

本文中提到的第三方产品由 Microsoft 以外的其他公司提供。 Microsoft 不对这些产品的性能或可靠性提供任何明示或暗示性担保。