Microsoft Entra 直通身份验证:安全性深入探讨

本文将更加详细地介绍 Microsoft Entra 直通身份验证的工作原理。 本文注重此功能的安全性方面。 本文适用于:任何规模的组织或企业的安全管理员、IT 管理员、首席合规官、首席安全官以及负责 IT 安全性和合规性的其他 IT 专业人士。

论述的主题包括:

  • 关于如何安装和注册身份验证代理的详细技术信息。
  • 关于用户登录期间的密码加密的详细技术信息。
  • 本地身份验证代理和 Microsoft Entra ID 之间通道的安全性。
  • 关于如何保持身份验证代理操作安全的详细技术信息。

直通身份验证的关键安全功能

直通身份验证具有以下关键的安全功能:

  • 它构建于安全的多租户体系结构上,此体系结构隔离租户之间的登录请求。
  • 本地密码永远不会以任何形式存储在云中。
  • 本地身份验证代理侦听和响应密码验证请求,它仅从网络内部建立出站连接。 无需在外围网络中安装这些身份验证代理(外围网络也称为 DMZ、外围安全区域和屏蔽式子网)。 最佳做法是将运行身份验证代理的所有服务器都视为第 0 层系统(请查看参考)。
  • 从身份验证代理到 Microsoft Entra ID 的出站通信仅使用标准端口(端口 80 和 443)。 不需打开防火墙上的入站端口。
    • 端口 443 用于所有经过身份验证的出站通信。
    • 端口 80 仅用于下载证书吊销列表 (CRL),以确保未吊销此功能使用的任何证书。
    • 如需网络要求的完整列表,请参阅 Microsoft Entra 直通身份验证:快速入门
  • 用户在登录期间提供的密码将在云中加密,再由本地身份验证代理接受,通过 Windows Server Active Directory (Windows Server AD) 进行验证。
  • 通过相互进行身份验证保护 Microsoft Entra ID 和本地身份验证代理之间的 HTTPS 通道。
  • 直通身份验证通过与 Microsoft Entra 条件访问策略(包括多重身份验证 (MFA)、阻止旧式身份验证)无缝协作,也可通过筛选暴力破解密码攻击来保护用户帐户。

直通身份验证中涉及的组件

有关 Microsoft Entra ID 操作、服务和数据安全性的常规详细信息,请查看信任中心。 使用直通身份验证进行用户登录时,涉及到以下组件:

  • Microsoft Entra 安全令牌服务 (Microsoft Entra STS):一项无状态 STS,它根据需要处理登录请求,并向用户的浏览器、客户端或服务发布安全令牌。
  • Azure 服务总线:可在云端使用企业消息传递进行通信,也可采用中继进行通信,帮助将本地解决方案与云端连接
  • Microsoft Entra Connect 身份验证代理:用于侦听和响应密码验证请求的本地组件。
  • Azure SQL 数据库:保存有关租户身份验证代理的信息,包括其元数据和加密密钥。
  • Windows Server AD:本地 Active Directory,用于存储用户帐户及其密码。

安装和注册身份验证代理

执行以下操作之一时,将安装身份验证代理并将其注册到 Microsoft Entra ID:

启用身份验证代理涉及三个主要阶段:

  • 安装
  • 注册
  • 初始化

以下各节详细讨论这些阶段。

安装身份验证代理

只有混合标识管理员帐户可在本地服务器上安装身份验证代理(使用 Microsoft Entra Connect 或独立实例)。

安装后,“控制面板”>“程序”>“程序和功能”中的列表中将显示两个新条目:

  • 身份验证代理应用程序本身。 此应用程序使用 NetworkService 特权运行。
  • 用于自动更新身份验证代理的更新程序应用程序。 此应用程序使用 LocalSystem 特权运行。

重要

从安全角度来看,管理员应将运行直通身份验证代理的服务器视为域控制器。 应按照保护域控制器免受攻击中所述,强化直通身份验证代理的代理服务器。

注册身份验证代理

安装身份验证代理后,它会将自身注册到 Microsoft Entra ID。 Microsoft Entra ID 为每个身份验证代理分配一个唯一数字标识证书,该证书可用于与 Microsoft Entra ID 进行安全通信。

注册过程还将身份验证代理与租户绑定在一起。 然后,Microsoft Entra ID 就会知道,此特定身份验证代理是经授权来处理租户密码验证请求的唯一代理。 注册每个新身份验证代理都要重复此过程。

身份验证代理使用以下步骤自行注册到 Microsoft Entra ID:

Diagram that depicts authentication agent registration with Azure AD.

  1. Microsoft Entra 首先请求混合标识管理员使用其凭据登录到 Microsoft Entra ID。 在登录期间,身份验证代理会获取一个访问令牌,该令牌可代表用户。
  2. 然后,身份验证代理生成一个密钥对:一个公钥和一个私钥。
    • 此密钥对通过标准 RSA 2,048 位加密生成。
    • 私钥停留在本地服务器上,这是身份验证代理驻留的地方。
  3. 身份验证代理通过 HTTPS 向 Microsoft Entra ID 发出“注册”请求,此请求中包含以下组件:
    • 代理获取的访问令牌。
    • 生成的公钥。
    • 证书签名请求(CSR 或证书请求)。 此请求申请数字标识证书,Microsoft Entra ID 为其证书颁发机构 (CA)。
  4. Microsoft Entra ID 验证注册请求中的访问令牌,确认该请求来自混合标识管理员。
  5. 然后,Microsoft Entra ID 对数字标识证书签名,并将其发送回身份验证代理。
    • Microsoft Entra ID 中的根 CA 用于证书签名。

      注意

      此 CA 不在 Windows 的受信任根证书颁发机构存储中

    • 此 CA 仅由直通身份验证功能使用。 CA 仅在身份验证代理注册过程中用于签署 CSR。

    • 没有其他 Microsoft Entra 服务使用此 CA。

    • 证书主题(可分辨名称或 DN)将设置为租户 ID。 此 DN 是唯一标识租户的 GUID。 此 DN 将此证书限制为仅用于租户。

  6. Microsoft Entra ID 将身份验证代理的公钥存储在 Azure SQL 数据库的数据库中。 只有Microsoft Entra ID 才能访问数据库。
  7. 发布的证书存储在本地服务器上的 Windows 证书存储中(具体来说是 CERT_SYSTEM_STORE_LOCAL_MACHINE)。 该证书可供身份验证代理和更新程序应用程序使用。

初始化身份验证代理

身份验证代理启动时(注册后首次启动或服务器重启后启动),它需要通过一种方式与 Microsoft Entra 服务安全地通信,以便可开始接受密码验证请求。

Diagram that depicts authentication agent initialization.

下面介绍如何初始化身份验证代理:

  1. 身份验证代理向 Microsoft Entra ID 发出出站启动请求。

    此请求通过端口 443 发出,也是通过相互进行身份验证的 HTTPS 通道发出。 请求使用的证书是在身份验证代理注册期间发出的。

  2. Microsoft Entra ID 通过向对于租户而言唯一的服务总线队列(由租户 ID 标识)提供访问令牌,来响应此请求。

  3. 身份验证代理(通过端口 443)与队列建立持续出站 HTTPS 连接。

此时,身份验证代理就可以检索和处理密码验证请求了。

如果租户上注册了多个身份验证代理,初始化过程会确保每个代理连接到同一服务总线队列。

直通身份验证如何处理登录请求

下图显示了直通身份验证如何处理用户登录请求:

Diagram that depicts how pass-through authentication processes user sign-in requests.

直通身份验证如何处理用户登录请求:

  1. 用户尝试访问某个应用程序,例如 Outlook Web 应用

  2. 如果用户尚未登录,此应用程序将浏览器重定向到 Microsoft Entra 登录页面。

  3. Microsoft Entra STS 服务通过“用户登录”页面反向响应。

  4. 用户在“用户登录”页中输入其用户名,然后选择“下一步”按钮。

  5. 用户在“用户登录”页中输入其密码,然后选择“登录”按钮。

  6. 在 HTTPS POST 请求中,将用户名和密码提交到 Microsoft Entra STS。

  7. Microsoft Entra STS 从 Azure SQL 数据库检索租户上注册的所有身份验证代理的公钥,并使用密钥来加密密码。

    它为租户上注册的每个身份验证代理生成一个加密密码值。

  8. Microsoft Entra STS 将密码验证请求(包含用户名和加密密码值)放在特定于租户的服务总线队列中。

  9. 由于初始化的身份验证代理持续连接到服务总线队列,因此其中一个可用身份验证代理会检索密码验证请求。

  10. 身份验证代理使用标识符来查找特定于其公钥的加密密码值。 它使用其私钥来解密公钥。

  11. 此身份验证代理将使用 Win32 LogonUser API(将 dwLogonType 参数设置为 LOGON32_LOGON_NETWORK),尝试向 Windows Server AD 验证用户名和密码。

    • 在联合登录方案中,Active Directory 联合身份验证服务 (AD FS) 使用此 API 登录用户。
    • 此 API 依赖 Windows Server 中的标准解析进程来查找域控制器。
  12. 身份验证代理从 Windows Server AD 检索结果(例如成功、用户名或密码不正确或密码过期)。

    注意

    如果在登录过程中身份验证代理失败,将删除整个登录请求。 登录请求不会从一个本地身份验证代理传递到另一个本地身份验证代理。 这些代理仅与云通信,不会互相通信。

  13. 身份验证代理通过端口 443,由经相互身份验证的出站 HTTPS 通道将此结果转发回 Microsoft Entra STS。 相互身份验证使用先前在注册期间发布给此身份验证代理的证书。

  14. Microsoft Entra STS 验证此结果与租户上的特定登录请求相关联。

  15. Microsoft Entra STS 按配置继续进行登录过程。 例如,如果密码验证成功,则可能要求用户进行 MFA,或者将用户重定向回该应用程序。

身份验证代理的操作安全性

为确保直通身份验证保持操作安全,Microsoft Entra ID 会定期续订身份验证代理的证书。 Microsoft Entra ID 触发续订。 续订不由身份验证代理自行管理。

Diagram that depicts how operational security works with pass-through authentication.

若要向 Microsoft Entra ID 续订身份验证代理的信任关系,请执行以下操作:

  1. 身份验证代理每过几小时对 Microsoft Entra 执行一次 ping 操作,检查是否应续订其证书。 证书将在过期前 30 天续订。

    此检查通过经相互身份验证的 HTTPS 通道执行,使用注册期间颁发的证书。

  2. 如果服务指示应当续订,身份验证代理会生成一个新的密钥对:一个公钥和一个私钥。

    • 这些密钥通过标准 RSA 2,048 位加密生成。
    • 私钥永远不会离开本地服务器。
  3. 然后,身份验证代理通过 HTTPS 向 Microsoft Entra ID 发出证书续订请求。 请求中包含以下组成部分:

    • 从 Windows 证书存储中的 CERT_SYSTEM_STORE_LOCAL_MACHINE 位置检索到的现有证书。 此过程不涉及全局管理员,因此全局管理员不需要访问令牌。
    • 步骤 2 中生成的公钥。
    • 一个 CSR。 此请求申请新的数字标识证书,其 CA 是 Microsoft Entra ID。
  4. Microsoft Entra ID 验证证书续订请求中的现有证书。 然后,它将验证此请求是否来已在自租户上注册的身份验证代理。

  5. 如果现有证书仍然有效,Microsoft Entra ID 会对新的数字标识证书进行签名,并将其发布回身份验证代理。

  6. 如果现有证书已过期,Microsoft Entra ID 会从租户的已注册身份验证代理列表中删除此身份验证代理。 然后,全局管理员或混合标识管理员必须手动安装并注册新的身份验证代理。

    • 使用 Microsoft Entra ID 根证书对证书进行签名。
    • 将证书的 DN 设置为租户 ID,此 ID 是一个用于唯一标识租户的 GUID。 此 DN 使证书仅针对你的租户。
  7. Microsoft Entra ID 将新的身份验证代理公钥存储于仅它可访问的 Azure SQL 数据库的数据库中。 它还会使与此身份验证代理关联的旧公钥无效。

  8. 然后,将(步骤 5 中颁发的)新证书存储到服务器上的 Windows 证书存储(具体来说是 CERT_SYSTEM_STORE_CURRENT_USER 位置)。

    由于信任续订过程为非交互式(不涉及全局管理员或混合标识管理员),因此身份验证代理不再有权更新 CERT_SYSTEM_STORE_LOCAL_MACHINE 位置的现有证书。

    注意

    此过程不删除 CERT_SYSTEM_STORE_LOCAL_MACHINE 位置的证书本身。

  9. 从此时开始,将使用新证书进行身份验证。 随后每次续订该证书都会替换 CERT_SYSTEM_STORE_LOCAL_MACHINE 位置的证书。

身份验证代理自动更新

新版本(含 bug 修复或性能增强)发布时,此更新程序应用程序会自动更新身份验证代理。 此更新程序应用程序不处理租户的任何密码验证请求。

Microsoft Entra ID 以已签名 Windows Installer 程序包 (MSI) 的形式,托管该软件的新版本。 使用 Microsoft 验证码和 SHA-256 摘要算法对 MSI 进行签名。

Diagram that shows how an authentication agent is auto updated.

若要自动更新身份验证代理,请执行以下操作:

  1. 更新程序应用程序每小时对 Microsoft Entra 执行一次 ping 操作,检查是否有新版本的身份验证代理可用。

    此检查通过经相互身份验证的 HTTPS 通道执行,方法是使用注册期间颁发的证书。 身份验证代理和更新程序共享服务器上存储的证书。

  2. 如果有新版本可用,Microsoft Entra ID 会将已签名的 MSI 返回到更新程序。

  3. 更新程序验证此 MSI 已由 Microsoft 签名。

  4. 更新程序运行该 MSI。 在此过程中,更新程序应用程序会执行以下操作:

    注意

    更新程序使用本地系统权限运行。

    1. 停止身份验证代理服务。
    2. 在服务器上安装新版本的身份验证代理。
    3. 重启身份验证代理服务。

注意

如果租户上注册了多个身份验证代理,Microsoft Entra ID 不会同时续订其证书或同时更新它们。 相反,Microsoft Entra ID 会逐一续订证书,确保登录请求的高可用性。

后续步骤