排查 Microsoft Entra 无缝单一登录

本文可帮助你找到有关 Microsoft Entra 无缝单一登录(无缝 SSO)常见问题的故障排除信息。

已知问题

  • 在一些情况下,启用无缝 SSO 最多可能需要 30 分钟。
  • 如果对租户禁用并重新启用无缝 SSO,则用户在其缓存的 Kerberos 票证(通常 10 小时有效)过期前,将不会获得单一登录体验。
  • 如果无缝 SSO 成功,用户将没有机会选择“使我保持登录状态”
  • 版本 16.0.8730.xxxx 及更高版本的 Microsoft 365 Win32 客户端(Outlook、Word、Excel 等)支持使用非交互式流。 不支持其他版本;在这些版本中,用户需输入用户名而不是密码登录。 对于 OneDrive,必须激活 OneDrive 无提示配置功能才能获得无提示登录体验。
  • 无缝 SSO 在 Firefox 的隐私浏览模式下不起作用。
  • 开启增强保护模式时,无缝 SSO 在 Internet Explorer 中不起作用。
  • 不再支持 Microsoft Edge(旧版)
  • 无缝 SSO 在 iOS 和 Android 的移动浏览器上不起作用。
  • 如果某个用户属于 Active Directory 中过多的组,则该用户的 Kerberos 票证可能会太大而无法处理,这会导致无缝 SSO 失败。 Microsoft Entra HTTPS 请求可以具有大小上限为 50 KB 的标头;Kerberos 票证需要远小于该上限,才能容纳其他 Microsoft Entra 工件(通常为 2 - 5 KB),比如 Cookie。 我们的建议是减少用户的组成员身份,然后重试。
  • 如果你要同步 30 个或更多的 Active Directory 林,则不能通过 Microsoft Entra Connect 启用无缝 SSO。 作为一种解决方法,可以在租户中手动启用该功能。
  • 将 Microsoft Entra 服务 URL (https://autologon.microsoftazuread-sso.com) 添加到受信任站点区域(而不是本地 Intranet 区域)后,会阻止用户登录。
  • 无缝 SSO 支持的 Kerberos 加密类型为 AES256_HMAC_SHA1、AES128_HMAC_SHA1 和 RC4_HMAC_MD5。 建议将 AzureADSSOAcc$ 帐户的加密类型设置为 AES256_HMAC_SHA1 或 AES 类型之一(而不是RC4 类型),以提高安全性。 加密类型存储在 Active Directory 帐户的 msDS-SupportedEncryptionTypes 属性中。 如果 AzureADSSOAcc$ 帐户加密类型设置为 RC4_HMAC_MD5,并且你要将其更改为 AES 加密类型之一,请确保先滚动更新 AzureADSSOAcc$ 帐户的 Kerberos 解密密钥(如常见问题解答文档中的相关问题下所述),否则无缝 SSO 不会运行。
  • 如果多个林中有林信任,那么在其中一个林中启用 SSO 将在所有受信任的林中启用 SSO。 如果在已启用 SSO 的林中启用 SSO,则会收到一条错误消息,指明林中已启用 SSO。
  • 启用无缝 SSO 的策略的字符上限为 25600。 此限制适用于策略中包含的所有内容,包括你希望启用无缝 SSO 的林名称。 如果环境中具有大量林,可能会达到字符上限。 如果林之间具有信任关系,则只需在一个林上启用无缝 SSO 即可。 例如,如果你具有 contoso.com 和 fabrikam.com 并且两者之间存在信任,则可以仅在 contoso.com 上启用无缝 SSO,这也适用于 fabrikam.com。 这样可以减少策略中启用的林数量并避免达到策略字符上限。

检查功能状态

确保租户上的无缝 SSO 功能仍处于“已启用”状态。 可以在 [Microsoft Entra 管理中心](https://portal.azure.com/) 转到“标识”>“混合管理”>“Microsoft Entra Connect”>“连接同步”窗格,检查状态。

屏幕截图显示了 Microsoft Entra 管理中心:“Microsoft Entra Connect”窗格。

点击浏览所有支持无缝 SSO 的 AD 林。

Microsoft Entra 管理中心“无缝 SSO”窗格的屏幕截图。

Microsoft Entra 管理中心登录失败原因(需要 Premium 许可证)

如果你的租户有关联的 Microsoft Entra ID P1 或 P2 许可证,还可在 Microsoft Entra 管理中心的 Microsoft Entra ID 内查看登录活动报告

Microsoft Entra 管理中心“登录报告”的屏幕截图。

在 [Microsoft Entra 管理中心](https://portal.azure.com/) 中浏览到“标识”>“监视和运行状况”>“登录”,然后选择特定用户的登录活动。 查找“登录错误代码”字段。 通过使用下表将该字段的值映射到某个失败原因和解决方法:

登录错误代码 登录失败原因 解决方法
81001 用户的 Kerberos 票证太大。 减少用户的组成员身份,然后重试。
81002 无法验证用户的 Kerberos 票证。 请参阅故障排除清单
81003 无法验证用户的 Kerberos 票证。 请参阅故障排除清单
81004 Kerberos 身份验证尝试失败。 请参阅故障排除清单
81008 无法验证用户的 Kerberos 票证。 请参阅故障排除清单
81009 无法验证用户的 Kerberos 票证。 请参阅故障排除清单
81010 无缝 SSO 失败,因为用户的 Kerberos 票证已过期或无效。 用户需要从企业网络内部已加入域的设备登录。
81011 根据用户的 Kerberos 票证中的信息,找不到用户对象。 使用 Microsoft Entra Connect 将用户的信息同步到 Microsoft Entra ID 中。
81012 尝试登录到 Microsoft Entra ID 的用户不同于已登录到设备的用户。 用户需要从不同的设备登录。
81013 根据用户的 Kerberos 票证中的信息,找不到用户对象。 使用 Microsoft Entra Connect 将用户的信息同步到 Microsoft Entra ID 中。

故障排除清单

使用以下清单排查无缝 SSO 问题:

  • 确保在 Microsoft Entra Connect 中已启用无缝 SSO 功能。 如果无法启用该功能(例如,由于端口被阻止),请确保事先满足所有先决条件
  • 如果同时对租户启用了 Microsoft Entra 联接和无缝 SSO,请确保 Microsoft Entra 联接没有问题。 如果设备已注册 Microsoft Entra ID 且已联接域,则 Microsoft Entra 联接的 SSO 优先于无缝 SSO。 使用 Microsoft Entra 联接的 SSO 时,用户将看到显示“已连接到 Windows”的登录磁贴。
  • 请确保 Microsoft Entra URL (https://autologon.microsoftazuread-sso.com) 是用户的 Intranet 区域设置的一部分。
  • 确保企业设备已加入 Active Directory 域。 设备需要联接 Microsoft Entra 来使无缝 SSO 正常运行。
  • 确保用户已通过 Active Directory 域帐户登录到设备。
  • 确保用户的帐户来自已设置了无缝 SSO 的 Active Directory 林。
  • 确保已在企业网络中连接该设备。
  • 确保设备的时间与 Active Directory 和各域控制器的时间同步,并且彼此偏差不超过 5 分钟。
  • 确保 AZUREADSSOACC 计算机帐户在要启用无缝 SSO 的每个 AD 林中存在并已启用。 如果计算机帐户已被删除或丢失,可使用 PowerShell cmdlets 重新创建。
  • 使用命令提示符中的 klist 命令列出设备上的现有 Kerberos 票证。 确保存在针对 AZUREADSSOACC 计算机帐户颁发的票证。 通常情况下,用户的 Kerberos 票证的有效期为 10 小时。 你可能在 Active Directory 中有不同的设置。
  • 如果对租户禁用并重新启用无缝 SSO,则用户在其缓存的 Kerberos 票证过期前,将不会获得单一登录体验。
  • 使用 klist purge 命令从设备中清除现有的 Kerberos 票证,然后重试。
  • 若要确定是否存在与 JavaScript 相关的问题,请查看浏览器的控制台日志(在“开发人员工具”下)。
  • 查看域控制器日志

域控制器日志

如果在域控制器上成功启用审核,则每当用户通过无缝 SSO 登录时,将在事件日志中记录一个安全条目。 你可以使用以下查询来查找这些安全事件。 (查找与计算机帐户 AzureADSSOAcc$ 相关联的事件 4769。)

  <QueryList>
    <Query Id="0" Path="Security">
      <Select Path="Security">*[EventData[Data[@Name='ServiceName'] and (Data='AZUREADSSOACC$')]]</Select>
    </Query>
  </QueryList>

手动重置功能

如果故障排除不起作用,请在租户中手动重置该功能。 在运行 Microsoft Entra Connect 的本地服务器上执行以下步骤。

步骤 1:导入无缝 SSO PowerShell 模块

  1. 首先,下载并安装 Azure AD PowerShell
  2. 浏览到 %programfiles%\Microsoft Azure Active Directory Connect 文件夹。
  3. 使用以下命令导入无缝 SSO PowerShell 模块:Import-Module .\AzureADSSO.psd1

步骤 2:获取已在其中启用了无缝 SSO 的 Active Directory 林列表

  1. 以管理员身份运行 PowerShell。 在 PowerShell 中,调用 New-AzureADSSOAuthenticationContext。 出现提示时,输入租户的混合标识管理员凭据。
  2. 调用 Get-AzureADSSOStatus。 此命令可提供已在其中启用了此功能的 Active Directory 林列表(请查看“域”列表)。

步骤 3:禁用在其中设置了该功能的每个 Active Directory 林的无缝 SSO

  1. 调用 $creds = Get-Credential。 出现提示时,输入目标 Active Directory 林的域管理员凭据。

    注意

    必须以 SAM 帐户名称格式(contoso\johndoe 或 contoso.com\johndoe)输入域管理员凭据用户名。 我们使用用户名的域部分查找使用 DNS 的域管理员的域控制器。

    注意

    使用的域管理员帐户不得是受保护用户组的成员。 如果是,则操作将失败。

  2. 调用 Disable-AzureADSSOForest -OnPremCredentials $creds。 此命令将从本地域控制器删除此特定 Active Directory 林的 AZUREADSSOACC 计算机帐户。

    注意

    如果因故无法访问本地 AD,则可跳过步骤 3.1 和 3.2,改为调用

  3. 为在其中设置了该功能的每个 Active Directory 林重复上述步骤。

步骤 4:为每个 Active Directory 林启用无缝 SSO

  1. 调用 Enable-AzureADSSOForest。 出现提示时,输入目标 Active Directory 林的域管理员凭据。

    注意

    必须以 SAM 帐户名称格式(contoso\johndoe 或 contoso.com\johndoe)输入域管理员凭据用户名。 我们使用用户名的域部分查找使用 DNS 的域管理员的域控制器。

    注意

    使用的域管理员帐户不得是受保护用户组的成员。 如果是,则操作将失败。

  2. 为你要在其中设置该功能的每个 Active Directory 林重复上述步骤。

步骤 5:在租户上启用此功能

若要在租户上启用此功能,请调用 Enable-AzureADSSO -Enable $true