你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

教程:为 Azure Active Directory B2C 配置 Ping 标识以实现安全的混合访问

此教程介绍如何使用 PingAccessPingFederate 扩展 Azure Active Directory B2C (Azure AD B2C) 的功能。 PingAccess 提供对应用程序和 API 的访问,以及用于授权用户访问的策略引擎。 PingFederate 是用于用户身份验证和单一登录的企业联合身份验证服务器,允许客户、员工和合作伙伴从设备访问应用程序。 结合使用两者以启用安全混合访问 (SHA)。

许多可通过 Internet 访问的电子商务站点和 Web 应用程序都是在代理系统或反向代理系统的支持下进行部署的。 这些代理系统进行预先身份验证、执行策略和路由流量。 典型方案包括保护 Web 应用程序避免入站 Web 流量以及在分布式服务器部署中提供统一的会话管理。

通常,配置会包括身份验证转换层,该转换层从 Web 应用程序将身份验证外部化。 反向代理会将经过身份验证的用户的上下文提供到 Web 应用程序(如采用明文或摘要形式标头值)。 这些应用程序不使用行业标准令牌,例如安全断言标记语言 (SAML)、OAuth 或 OpenID Connect (OIDC)。 相反,代理提供身份验证上下文并维护与最终用户代理(例如浏览器或本机应用程序)之间的会话。 作为以“中间人”形式运行的服务,代理提供重要的会话控制。 代理服务高效且可缩放,不是代理服务支持的应用程序的瓶颈。 该图是反向代理实现和通信流程。

反向代理实现的示意图。

现代化

如果要在此类配置中将标识平台现代化,客户可能会有以下顾虑:

  • 导致将应用程序现代化与将标识平台现代化互不相干
  • 使用现代化标识服务提供商时具有新式和旧式身份验证的环境
    • 提高最终用户体验的一致性
    • 提供跨应用程序的单一登录体验

对于这些顾虑,本教程中的方法是 Azure AD B2C、PingAccessPingFederate 集成。

共享环境

在技术上切实可行同时也经济高效的解决方案是将反向代理系统配置为使用现代化标识系统,委托身份验证。
代理将支持新式身份验证协议,并使用会将用户发送到新标识提供者 (IDP) 的基于重定向(被动)的身份验证。

Azure AD B2C 作为标识提供者

在 Azure AD B2C 中,你定义优化用户体验和行为的策略,也称为用户旅程。 这种策略中的每一个都会公开一个协议终结点,该终结点可以执行身份验证,就像它是 IDP 一样。 在应用程序端,无需对某些策略进行特殊处理。 应用程序向策略公开的特定于协议的身份验证终结点发出标准身份验证请求。
你可以将 Azure AD B2C 配置为多个策略共享同一颁发者或每个策略一个独一无二的颁发者。 每个应用程序都可以通过发出协议本机身份验证请求来指向策略,这可以驱动用户行为,如登录、注册和编辑配置文件。 此图显示了 OIDC 和 SAML 应用程序工作流。

OIDC 和 SAML 应用程序工作流的示意图。

旧式应用程序可能难以在该方案中准确地重定向用户。 对应用程序的访问请求可能不包括用户体验上下文。 在大多数情况下,代理层或 Web 应用程序上的集成代理会截获访问请求。

PingAccess 反向代理

你可以将 PingAccess 部署为反向代理。 PingAccess 可以通过作为中间人,或作为来自 Web 应用程序服务器上运行的代理的重定向,来截获直接请求。

使用 OIDC、OAuth2 或 SAML 配置 PingAccess,以便针对上游身份验证提供程序执行身份验证。 为此,可以在 PingAccess 服务器上配置上游 IdP。 请参阅下图。

PingAccess 服务器上的上游 IDP 的示意图。

在具有公开 IdP 的策略的典型 Azure AD B2C 部署中,这有点困难。 PingAccess 配置有一个上游 IdP。

PingFederate 联合身份验证代理

对于上游 IdP,你可以将 PingFederate 配置为身份验证提供程序或代理。 请参阅下图。

一个示意图,其中显示了对于上游 IDP,配置为身份验证提供程序或代理的 PingFederate。

使用此函数以上下文方式、动态方式或声明方式将入站请求切换为 Azure AD B2C 策略。 请查看下方的协议序列流图。

PingAccess、PingFederate、Azure AD B2C 和应用程序的协议序列流的示意图。

先决条件

若要开始,需要:

  • Azure 订阅
  • 一个已关联到你的 Azure 订阅的 Azure AD B2C 租户
  • PingAccess 和 PingFederate 部署在 Docker 容器中或 Azure 虚拟机 (VM) 中

连接性和通信

确认以下连接性和通信。

  • PingAccess 服务器 - 与 PingFederate 服务器、客户端浏览器、OIDC、OAuth 已知以及 Azure AD B2C 服务和 PingFederate 服务器发布的密钥发现通信
  • PingFederate 服务器 - 与 PingAccess 服务器、客户端浏览器、OIDC、OAuth 已知以及 Azure AD B2C 服务发布的密钥发现通信
  • 旧式或基于标头的 AuthN 应用程序 - 与 PingAccess 服务器相互通信
  • SAML 依赖方应用 - 从客户端访问浏览器流量。 访问 Azure AD B2C 服务发布的 SAML 联合元数据。
  • 新式应用程序 - 从客户端访问浏览器流量。 访问 OIDC、OAuth 已知和 Azure AD B2C 服务发布的密钥发现。
  • REST API - 从本机或 Web 客户端访问流量。 访问 OIDC、OAuth 已知和 Azure AD B2C 服务发布的密钥发现

配置 Azure AD B2C

你可以使用基本用户流或高级标识企业框架 (IEF) 策略。 PingAccess 通过使用发现约定的 WebFinger 协议,根据颁发者值生成元数据终结点。 若要遵循此约定,请使用用户流策略属性更新 Azure AD B2C 颁发者。

“令牌兼容性”对话框中主题子声明 URL 的屏幕截图。

在高级策略中,配置包括 IssuanceClaimPattern 元数据元素到 JWT 令牌颁发者技术配置文件中的 AuthorityWithTfp 值。

配置 PingAccess 和 PingFederate

按照以下部分中的说明配置 PingAccess 和 PingFederate。 请查看下方的整体集成用户流图。

PingAccess 和 PingFederate 集成用户流的示意图

将 PingFederate 配置为令牌提供程序

若要将 PingFederate 配置为 PingAccess 的令牌提供程序,请确保已建立从 PingFederate 到 PingAccess 的连接。 确认已建立从 PingAccess 到 PingFederate 的连接。

有关详细信息,请参阅 Ping 标识文档中的将 PingFederate 配置为 PingAccess 的令牌提供程序

为基于标头的身份验证配置 PingAccess 应用程序

使用以下说明为目标 Web 应用程序创建 PingAccess 应用程序,以进行基于标头的身份验证。

创建虚拟主机

重要

为每个应用程序创建一个虚拟主机。 有关详细信息,请参阅 Ping 标识文档中的可以使用 PingAccess 配置什么?

若要创建虚拟主机,请执行以下操作:

  1. 转到“设置”>“访问”>“虚拟主机”。
  2. 选择“添加虚拟主机”。
  3. 对于“主机”,输入应用程序 URL 的 FQDN 部分。
  4. 对于“端口”,请输入 443。
  5. 选择“保存”。

创建 Web 会话

若要创建 Web 会话,请执行以下操作:

  1. 导航到“设置”>“访问”>“Web 会话”。
  2. 选择“添加 Web 会话”。
  3. 为该 Web 会话输入“名称”。
  4. 选择“Cookie 类型”,即“签名的 JWT”或“加密的 JWT”。
  5. 为“受众”输入唯一值。
  6. 对于“客户端 ID”,请输入 Microsoft Entra 应用程序 ID。
  7. 对于“客户端密码”,请输入你在 Microsoft Entra ID 中为应用程序生成的密钥。
  8. (可选)使用 Microsoft Graph API 创建和使用自定义声明:选择“高级”。 取消选择“请求配置文件”和“刷新用户属性”。 若要了解自定义声明的详细信息,请参阅通过 Microsoft Entra 应用程序代理对本地应用使用基于标头的单一登录
  9. 选择“保存”

创建标识映射

注意

如果多个应用程序需要在标头中有相同数据,你可以在多个应用程序中应用标识映射。

若要创建标识映射,请执行以下操作:

  1. 转到“设置”>“访问”>“标识映射”。
  2. 选择“添加标识映射”。
  3. 指定“名称”。
  4. 选择“标头标识映射的类型”标识映射。
  5. 在“属性映射”表中,指定所需的映射。 例如,
属性名称 标头名称
'upn' x-userprincipalname
'email' x-email
'oid' x-oid
'scp' x-scope
'amr' x-amr
  1. 选择“保存”

创建站点

注意

在某些配置中,一个站点可以包含多个应用程序。 如果适用,你可以将一个站点与多个应用程序结合使用。

若要创建站点,请执行以下操作:

  1. 转到“主要”>“站点”。
  2. 选择“添加站点”。
  3. 输入站点名称。
  4. 输入站点“目标”。 目标是承载应用程序的服务器的 hostname:port 对。 请不要在此字段中输入应用程序的路径。 例如,位于 https://mysite:9999/AppName 的应用程序的目标值将为 mysite:9999。
  5. 指示目标是否需要安全连接。
  6. 如果该目标需要安全连接,请将受信任的证书组设置为“信任任意”。
  7. 选择“保存”。

创建应用程序

为 Azure 中要保护的每个应用程序在 PingAccess 中创建应用程序。

  1. 转到“主要”>“应用程序”

  2. 选择“添加应用程序”

  3. 指定应用程序的“名称”

  4. 输入应用程序的“说明”(可选)

  5. 为该应用程序指定“上下文根”。 例如,位于 https://mysite:9999/AppName 的应用程序的上下文根将会是 /AppName。 上下文根必须以斜杠 (/) 开头,不能以斜杠 (/) 结尾,并且可以有多层深度,例如 /Apps/MyApp。

  6. 选择你创建的虚拟主机

    注意

    虚拟主机和上下文根的组合在 PingAccess 中必须是独一无二的。

  7. 选择你创建的 Web 会话

  8. 选择你创建的包含该应用程序的站点

  9. 选择你创建的标识映射

  10. 选择“已启用”,以便在保存时启用该站点

  11. 选择“保存”

配置 PingFederate 身份验证策略

将 PingFederate 身份验证策略配置为联合到由 Azure AD B2C 租户提供的多个 IdP

  1. 创建用于在 IdP 与 SP 之间桥接属性的协定。 你应该只需要一个协定,除非 SP 要求每个 IdP 都有一组不同的属性。 有关详细信息,请参阅 Ping 标识文档中的联合中心和身份验证策略协定

  2. 对于每个 IdP,在 IdP 和 PingFederate 之间创建 IdP 连接,联合中心作为 SP。

  3. 在“目标会话映射”窗口中,将适用的身份验证策略协定添加到 IdP 连接。

  4. 在“选择器”窗口中,配置身份验证选择器。 例如,请参阅标识符第一适配器的实例,以将每个 IdP 映射到身份验证策略中相应的 IdP 连接。

  5. 在 PingFederate 与 SP 之间创建 SP 连接(联合中心作为 IdP)。

  6. 将相应的身份验证策略协定添加到“身份验证源映射”窗口上的 SP 连接。

  7. 处理每个 IdP 以连接到 PingFederate,联合中心作为 SP。

  8. 处理 SP 以连接到 PingFederate,联合中心作为 IdP。

后续步骤

有关更多信息,请查看以下文章