排查 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”>“连接同步”窗格,检查状态。
点击浏览所有支持无缝 SSO 的 AD 林。
Microsoft Entra 管理中心登录失败原因(需要 Premium 许可证)
如果你的租户有关联的 Microsoft Entra ID P1 或 P2 许可证,还可在 Microsoft Entra 管理中心的 Microsoft Entra ID 内查看登录活动报告。
在 [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 模块
- 首先,下载并安装 Azure AD PowerShell。
- 浏览到
%programfiles%\Microsoft Azure Active Directory Connect
文件夹。 - 使用以下命令导入无缝 SSO PowerShell 模块:
Import-Module .\AzureADSSO.psd1
。
步骤 2:获取已在其中启用了无缝 SSO 的 Active Directory 林列表
- 以管理员身份运行 PowerShell。 在 PowerShell 中,调用
New-AzureADSSOAuthenticationContext
。 出现提示时,输入租户的混合标识管理员凭据。 - 调用
Get-AzureADSSOStatus
。 此命令可提供已在其中启用了此功能的 Active Directory 林列表(请查看“域”列表)。
步骤 3:禁用在其中设置了该功能的每个 Active Directory 林的无缝 SSO
调用
$creds = Get-Credential
。 出现提示时,输入目标 Active Directory 林的域管理员凭据。注意
必须以 SAM 帐户名称格式(contoso\johndoe 或 contoso.com\johndoe)输入域管理员凭据用户名。 我们使用用户名的域部分查找使用 DNS 的域管理员的域控制器。
注意
使用的域管理员帐户不得是受保护用户组的成员。 如果是,则操作将失败。
调用
Disable-AzureADSSOForest -OnPremCredentials $creds
。 此命令将从本地域控制器删除此特定 Active Directory 林的AZUREADSSOACC
计算机帐户。注意
如果因故无法访问本地 AD,则可跳过步骤 3.1 和 3.2,改为调用 。
为在其中设置了该功能的每个 Active Directory 林重复上述步骤。
步骤 4:为每个 Active Directory 林启用无缝 SSO
调用
Enable-AzureADSSOForest
。 出现提示时,输入目标 Active Directory 林的域管理员凭据。注意
必须以 SAM 帐户名称格式(contoso\johndoe 或 contoso.com\johndoe)输入域管理员凭据用户名。 我们使用用户名的域部分查找使用 DNS 的域管理员的域控制器。
注意
使用的域管理员帐户不得是受保护用户组的成员。 如果是,则操作将失败。
为你要在其中设置该功能的每个 Active Directory 林重复上述步骤。
步骤 5:在租户上启用此功能
若要在租户上启用此功能,请调用 Enable-AzureADSSO -Enable $true
。