Microsoft Entra 无缝单一登录:深入技术探究

本文从技术层面详细介绍了 Microsoft Entra 无缝单一登录(无缝 SSO)功能的工作原理。

无缝 SSO 的工作原理

本节包含三个部分:

  1. 无缝 SSO 功能的设置。
  2. 如何使用无缝 SSO 在 Web 浏览器上执行单个用户登录事务。
  3. 如何使用无缝 SSO 在本机客户端上执行单个用户登录事务。

如何进行设置?

可使用 Microsoft Entra Connect 启用无缝 SSO,如此处所示。 启用该功能时,请执行以下步骤:

  • 在同步到 Microsoft Entra ID(使用 Microsoft Entra Connect)的每个 AD 林的本地 Active Directory (AD) 中创建一个计算机帐户 (AZUREADSSOACC)。
  • 此外,创建多个 Kerberos 服务主体名称 (SPN) 以在 Microsoft Entra 登录过程中使用。
  • 计算机帐户的 Kerberos 解密密钥与 Microsoft Entra ID 安全共享。 如果有多个 AD 林,则每个计算机帐户都将拥有自己的唯一 Kerberos 解密密钥。

重要

出于安全原因,需要对 AZUREADSSOACC 计算机帐户进行严格保护。 只有域管理员才能管理计算机帐户。 请确保计算机帐户上的 Kerberos 委派处于禁用状态,并且 Active Directory 中的其他帐户没有对 AZUREADSSOACC 计算机帐户的委派权限。 将计算机帐户存储在组织单位 (OU) 中,在这里,它们不会被意外删除,并且只有域管理员具有访问权限。 计算机帐户上的 Kerberos 解密密钥也应该视为敏感内容。 我们强烈建议至少每隔 30 天滚动更新一次 AZUREADSSOACC 计算机帐户的 Kerberos 解密密钥

重要

无缝 SSO 支持 Kerberos 的 AES256_HMAC_SHA1AES128_HMAC_SHA1RC4_HMAC_MD5 加密类型。 建议将 AzureADSSOAcc$ 帐户的加密类型设置为 AES256_HMAC_SHA1 或 AES 与 RC4 类型之一,以提高安全性。 加密类型存储在 Active Directory 中的 msDS-SupportedEncryptionTypes 帐户属性上。 如果 AzureADSSOAcc$ 帐户加密类型设置为 RC4_HMAC_MD5,并且你要将其更改为 AES 加密类型之一,请确保先滚动更新 AzureADSSOAcc$ 帐户的 Kerberos 解密密钥(如 FAQ 文档中的相关问题下所述),否则无缝 SSO 不会运行。

完成此设置后,无缝 SSO 的工作方式与使用集成 Windows 身份验证 (IWA) 的任何其他登录的工作方式相同。

如何使用无缝 SSO 在 Web 浏览器上进行登录?

在 Web 浏览器上进行登录的流程如下所示:

  1. 用户尝试从企业网络内部已加入域的企业设备访问 Web 应用程序(例如,Outlook Web 应用 - https://outlook.office365.com/owa/)。

  2. 如果用户尚未登录,则会被重定向到 Microsoft Entra ID 登录页。

  3. 用户在 Microsoft Entra 登录页键入其用户名。

    注意

    对于某些应用程序,可跳过步骤 2 和 3。

  4. Microsoft Entra ID 在后台使用 JavaScript,通过“401 未授权”响应质询浏览器,以提供 Kerberos 票证。

  5. 然后,浏览器请求从 Active Directory 获取用于 AZUREADSSOACC 计算机帐户(表示 Microsoft Entra ID)的票证。

  6. Active Directory 查找计算机帐户,然后将使用计算机帐户机密加密的 Kerberos 票证返回给浏览器。

  7. 浏览器将其从 Active Directory 获取的 Kerberos 票证转发给 Microsoft Entra ID。

  8. Microsoft Entra ID 使用以前共享的密钥对 Kerberos 票证进行解密,其中包括登录到企业设备的用户的标识。

  9. 在评估之后,Microsoft Entra ID 会将一个令牌返回给应用程序,或者要求用户执行其他验证,例如多重身份验证。

  10. 如果用户登录成功,则该用户可以访问应用程序。

下图说明了所涉及的所有组件和步骤。

Seamless Single Sign On - Web app flow

无缝 SSO 是一项机会型功能,这意味着,如果失败,登录体验将回退到其常规行为 - 即,用户需要输入密码才能登录。

如何使用无缝 SSO 在本地客户端上进行登录?

在本地客户端上进行登录的流程如下所示:

  1. 用户尝试从企业网络内部已加入域的企业设备访问本地应用程序(例如,Outlook 客户端)。
  2. 如果用户尚未登录,本地应用程序将从设备的 Windows 会话中检索用户的用户名。
  3. 应用将用户名发送至 Microsoft Entra ID,并检索租户的 WS-Trust MEX 终结点。 此 WS-Trust 终结点由无缝 SSO 功能独占使用,并不是 Microsoft Entra ID 上的 WS-Trust 协议的常规实现。
  4. 应用随后查询 WS-Trust MEX 终结点,查看集成身份验证终结点是否可用。 集成身份验证终结点由无缝 SSO 功能独占使用。
  5. 如果步骤 4 成功,则颁发 Kerberos 质询。
  6. 如果应用还能检索 Kerberos 票证,则该应用会将其转发到 Microsoft Entra 的集成身份验证终结点。
  7. Microsoft Entra ID 解密 Kerberos 票证并对其进行验证。
  8. Microsoft Entra ID 授权用户登录,并向应用颁发 SAML 令牌。
  9. 然后应用将 SAML 令牌提交到 Microsoft Entra ID 的 OAuth2 令牌终结点。
  10. Microsoft Entra ID 验证 SAML 令牌,并向应用颁发指定资源的访问令牌和刷新令牌,以及 id 令牌。
  11. 用户获取访问应用资源的权限。

下图说明了所涉及的所有组件和步骤。

Seamless Single Sign On - Native app flow

后续步骤