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

教程:使用 Azure Active Directory B2C 和 F5 为应用程序启用安全混合访问 BIG-IP

重要

自 2025 年 5 月 1 日起,Azure AD B2C 将不再可供新客户购买。 在我们的常见问题解答中了解详细信息

了解如何将 Azure Active Directory B2C (Azure AD B2C) 与 F5 BIG-IP Access Policy Manager (APM) 集成。 可以通过 BIG-IP 安全性,结合 Azure AD B2C 预身份验证、条件访问 (CA) 和单点登录 (SSO),将旧版应用程序安全地公开到互联网。 F5 Inc. 侧重于连接的服务的交付、安全性、性能和可用性,包括计算、存储和网络资源。 它提供硬件、模块化软件和云就绪的虚拟设备解决方案。

将 F5 BIG-IP 应用交付控制器 (ADC) 部署为专用网络和互联网之间的安全网关。 有应用程序级检查和可自定义访问控制的功能。 如果部署为反向代理,请使用 BIG-IP 启用对业务应用程序的安全混合访问,并具有由 APM 管理的联合身份访问层。

转到 f5.com 资源和白皮书: 通过 Microsoft Entra ID 轻松配置对所有应用程序的安全访问

先决条件

若要开始,需要:

方案说明

下面的场景基于标头,但可以使用这些方法来实现 Kerberos SSO。

对于此方案,内部应用程序的访问依赖于从旧代理系统接收 HTTP 授权标头。 销售代理可以定向到相应的内容区域。 该服务需要扩展到更广泛的使用者基础。 应用程序会升级以提供消费者身份验证选项,或者被替换。

理想情况下,应用程序升级支持使用新式控制平面进行直接管理和治理。 但是,实现现代化所需的时间和工作量会带来成本和潜在的停机时间。 相反,在公共 Internet 和内部 Azure 虚拟网络 (VNet) 之间部署 BIG-IP 虚拟版 (VE),以通过 Azure AD B2C 进行访问。 应用程序前面的 BIG-IP 支持将服务与 Azure AD B2C 预身份验证和基于标头的 SSO 叠加,从而改善应用程序安全状况。

安全混合访问解决方案具有以下组件:

  • 应用程序 - 受 Azure AD B2C 保护的后端服务,BIG-IP 安全的混合访问
  • Azure AD B2C - 标识提供者 (IdP) 和 OpenID Connect (OIDC) 授权服务器,用于验证用户凭据、多重身份验证和对 BIG-IP APM 的 SSO
  • BIG-IP - 应用程序的反向代理。 BIG-IP APM 是 OIDC 客户端,首先将身份验证委托给 OIDC 授权服务器,然后将基于标头的 SSO 委托给后端服务。

下图展示了此方案中服务提供商(SP)发起的流程。

服务提供商发起的流的屏幕截图。

  1. 用户连接到应用程序终结点。 BIG-IP 是服务提供商。
  2. BIG-IP APM OIDC 客户端将用户重定向到 Azure AD B2C 租户终结点,即 OIDC 授权服务器
  3. Azure AD B2C 租户预验证用户并应用条件访问策略
  4. Azure AD B2C 使用授权代码将用户重定向回 SP
  5. OIDC 客户端要求授权服务器交换 ID 令牌的授权代码
  6. BIG-IP APM 授予用户访问权限,并在转发到应用程序的客户端请求中注入 HTTP 标头

Azure AD B2C 配置

若要启用 BIG-IP 并使用 Azure AD B2C 身份验证,请使用包含用户流或自定义策略的 Azure AD B2C 租户。

请参阅 教程:在 Azure AD B2C 中创建用户流和自定义策略

创建自定义特性

从 Azure AD B2C 用户对象、联合 IdP、API 连接器或用户注册获取自定义属性。 在指向应用的令牌中包含属性。

旧版应用程序需要特定属性,因此将它们包含在用户流中。 可以将它们替换为应用程序所需的属性。 或者,如果正在使用说明设置测试应用,那么请使用任何标头。

  1. 以至少 B2C IEF 策略管理员身份登录到 Azure 门户
  2. 在左侧窗格中,选择 “用户属性”。
  3. 选择 “添加” 以创建两个自定义属性。
  4. 对于代理 ID,请选择“字符串 数据类型”。
  5. 对于代理位置,选择字符串数据类型

将属性添加到用户流

  1. 在左侧菜单中,导航到“ 策略>用户流”。
  2. 选择您的策略,例如 B2C_1_SignupSignin
  3. 选择用户属性
  4. 添加这两个自定义属性。
  5. 添加 显示名称 属性。 这些属性是在用户注册期间收集的。
  6. 选择 应用程序声明
  7. 添加这两个自定义属性。
  8. 添加 显示名称。 这些属性会转到 BIG-IP。
  9. 选择运行用户流
  10. 在用户流菜单的左侧导航栏上,验证已定义属性的提示。

了解详细信息: 教程:在 Azure AD B2C 中创建用户流和自定义策略

Azure AD B2C 联合

联合 BIG-IP 和 Azure AD B2C 以实现相互信任。 在 Azure AD B2C 租户中将 BIG-IP 注册为 OIDC 应用程序。

  1. 在门户中,选择 “应用注册>新建注册”。
  2. 输入应用 名称,例如 HeaderApp1
  3. 在“支持的帐户类型”下,选择“任何标识提供者或组织目录中的帐户(用于通过用户流对用户进行身份验证)”
  4. “重定向 URI”下,选择 “Web”。
  5. 输入受保护的服务公共 FQDN。
  6. 输入路径。
  7. 保留剩余的选择。
  8. 选择“注册”。
  9. 导航到 证书和机密>+ 新客户端密码
  10. 输入描述性名称
  11. 输入 BIG-IP 使用密码的 TTL。
  12. 注意 BIG-IP 配置的客户端密码。

重定向 URI 是 BIG-IP 终端节点。 身份验证后,授权服务器(Azure AD B2C)会将用户发送到终结点。

了解详细信息 :教程:在 Azure AD B2C for Azure AD B2C 中注册 Web 应用程序

BIG-IP 配置

对于 BIG-IP 配置,请使用 Guided Configuration v.7/8。 工作流框架专为访问拓扑而定制,可快速发布 Web 服务。

引导式配置版本

  1. 要确认版本,请使用管理员账户登录 BIG-IP Web 配置。
  2. 转到“访问”“引导式配置”>
  3. 版本显示在右上角。

要升级引导式配置,请转到 my.f5.com for K85454683:在 BIG-IP 系统上升级 F5 BIG-IP 引导式配置

SSL 配置文件

使用配置了客户端 SSL 配置文件的 BIG-IP,通过 TLS 加密来保护客户端流量。 导入与应用面向公众的 URL 使用的域名匹配的证书。 我们建议您使用公有证书颁发机构,但您可以使用 BIG-IP 自签名证书进行测试。

要在 BIG-IP VE 中添加和管理证书,请转到 BIG-IP System 的 techdocs.f5.com:SSL 管理

引导式配置

  1. 若要启动部署向导,在 Web 配置中,转到 “访问>引导配置”。
  2. 选择 Federation>F5 作为 OAuth 客户端和资源服务器。
  3. 观察此场景的流摘要。
  4. 选择“下一步”。
  5. 随即启动向导。

OAuth 属性

在以下部分中,定义属性以启用 BIG-IP APM 与 OAuth 授权服务器(Azure AD B2C 租户)之间的联合。 在 BIG-IP 配置中,OAuth 被广泛引用。 该解决方案使用 OIDC(OAuth 2.0 协议上的标识层)。 OIDC 客户端验证用户身份并获取其他资料信息。

配置名称

配置显示名称有助于区分引导式配置中的部署配置。 无法更改名称,它仅显示在引导配置视图中。

模式

BIG-IP APM 是 OIDC 客户端,因此请选择 Client (客户端) 选项。

DNS 解析程序

指定的目标必须解析 Azure AD B2C 终结点的公共 IP 地址。 选择公共 DNS 解析程序,或创建新的解析程序。

提供者设置

将 Azure AD B2C 配置为 OAuth2 IdP。 引导配置具有 Azure AD B2C 模板,但不具有特定的范围。

添加新提供程序并对其进行配置:

OAuth 常规属性

性能 DESCRIPTION
OAuth 提供程序类型 习惯
选择 OAuth 提供程序 新建或使用 OAuth 提供程序
名称 B2C IdP 的显示名称。 登录时,此名称将作为提供程序选项显示给用户
令牌类型 JSON Web 令牌

OAuth 策略设置

性能 DESCRIPTION
范围 留空。 用户登录的 OpenID 范围会自动添加
授予类型 授权代码
启用 OpenID Connect 选择将 APM OAuth 客户端置于 OIDC 模式的选项
流类型 授权代码

OAuth 提供程序设置

以下 OpenID URI 指的是 OIDC 客户端用来发现 IdP 信息(例如签名证书轮换)的元数据终结点。

  1. 找到 Azure AD B2C 租户的元数据终结点。导航到“应用注册”“终结点”>
  2. 复制 Azure AD B2C OpenID Connect 元数据文档 URI。 例如,https://wacketywackb2c .b2clogin.com/<tenantname>.onmicrosoft.com/<policyname>/v2.0/.well-known/openid-configuration
  3. 然后使用属性更新 URI,https://<tenantname>.b2clogin.com/WacketywackB2C.onmicrosoft.com/B2C_1_SignUpIn/v2.0/.well-known/openid-configuration
  4. 将 URI 粘贴到浏览器中。
  5. 查看 Azure AD B2C 租户的 OIDC 元数据。
资产 DESCRIPTION
观众 表示 Azure AD B2C 租户中 BIG-IP 的应用程序客户端 ID
身份验证 URI B2C OIDC 元数据中的授权终结点
令牌 URI Azure AD B2C 元数据中的令牌终结点
用户信息请求 URI 留空。 Azure AD B2C 不支持此功能
OpenID URI 您创建的 OpenID URI 元数据终结点
忽略过期的证书验证 保持未选中状态
允许自签名的 JWK 配置证书 检查
受信任的 CA 捆绑包 选择“ca-bundle.crt”以使用 F5 信任的默认颁发机构
发现间隔 提供间隔,BIG-IP 将按此间隔查询 Azure AD B2C 租户以获取更新。 AGC 版本 16.1 0.0.19 中的最小间隔为 5 分钟。

OAuth 服务器设置

OIDC 授权服务器作为 Azure AD B2C 租户。

资产 说明
客户 ID 表示 Azure AD B2C 租户中 BIG-IP 的应用程序客户端 ID
客户端密码 应用程序客户端密码
客户端-服务器 SSL 配置文件 设置 SSL 配置文件以确保 APM 通过 TLS 与 Azure AD B2C IdP 通信。 选择默认serverssl

OAuth 请求设置

BIG-IP 在其预配置的请求集中要求 Azure AD B2C 请求。 但是,请求格式不正确,缺少重要参数。 因此,我们手动创建了它们。

令牌请求:已启用

资产 DESCRIPTION
选择 OAuth 请求 新建
HTTP 方法 帖子
启用标头 未选中
启用参数 已选中
参数 参数名称 参数值
客户编号 客户编号
随机数 随机数
重定向URI 重定向URI
范围 范围
response_type(响应类型) response_type(响应类型)
客户端密钥 客户端密钥
自定义 授权类型 (grant_type) 授权码

身份验证重定向请求:已启用

资产 DESCRIPTION
选择 OAuth 请求 新建
HTTP 方法 获取
提示类型 没有
启用标头 未选中
启用参数 已选中
参数 参数名称 参数值
客户编号 客户编号
重定向URI 重定向URI
response_type(响应类型) response_type(响应类型)
范围 范围
随机数 随机数

令牌刷新请求已禁用 ,可以根据需要启用和配置。

OpenID UserInfo 请求:在全局 Azure AD B2C 租户中 已禁用,不受支持。

虚拟服务器属性

创建 BIG-IP 虚拟服务器,以拦截对受安全混合访问保护的后端服务的外部客户端请求。 为虚拟服务器分配一个映射到代表应用程序的 BIG-IP 服务终端节点的公有 DNS 记录的 IP。 如果可用,请使用虚拟服务器,否则提供以下属性。

资产 DESCRIPTION
目标地址 后端应用程序的 BIG-IP 服务端点可以是私有或公有 IP。
服务端口 HTTPS 协议
启用重定向端口 选择以便用户自动从 http 重定向到 https
重定向端口 HTTP
客户端 SSL 配置文件 将预定义的 clientssl 配置文件与具有 SSL 证书的配置文件交换。 可以使用默认配置文件进行测试。 但它可能会导致浏览器警报。

池属性

后端服务在 BIG-IP 中显示为一个池,具有一个或多个应用程序服务器,虚拟服务器将入站流量定向到这些服务器。 选择一个池,否则创建一个新池。

资产 DESCRIPTION
负载均衡方法 选择轮循机制
池服务器 后端应用程序的内部 IP
港口 后端应用程序的服务端口

注释

确保 BIG-IP 可以看到池服务器地址。

SSO 设置

BIG-IP 支持 SSO 选项,但在 OAuth 客户端模式下,引导式配置仅限于 Kerberos 或 HTTP 标头。 启用 SSO 并使用以下信息让 APM 将定义的入站属性映射到出站标头。

资产 DESCRIPTION
标头操作 插入
标头名称 姓名
标头值 %{session.oauth.client.last.id_token.name}
标头操作 插入
标头名称 agentid
标头值 %{session.oauth.client.last.id_token.extension_AgentGeo}

注释

大括号中的 APM 会话变量区分大小写。 当 Azure AD B2C 属性名称作为 AgentID 发送时,输入 agentid 会导致属性映射失败。 以小写形式定义属性。 在 Azure AD B2C 中,用户流使用门户中的属性名称提示用户输入更多属性。 因此,使用句子大小写而不是小写。

单一登录设置的屏幕截图,包括类型和标头。

自定义属性

自定义用户在 APM 访问策略流中看到的屏幕的语言和外观。 编辑屏幕消息和提示、更改屏幕布局、颜色、图像以及本地化标题、说明和消息。

“窗体标题 ”文本字段中,将 F5 Networks 字符串替换为所需的名称。

会话管理属性

使用 BIG-IP 会话管理设置来定义终止会话或允许会话继续的条件。 为用户和 IP 地址以及错误页设置限制。 建议实现单一注销(SLO),以安全终止会话,降低未经授权的访问风险。

部署设置

选择 Deploy 以提交设置并创建 BIG-IP 和 APM 对象,以便对应用程序进行安全的混合访问。 该应用程序在条件访问中显示为目标资源。 为了提高安全性,可以阻止对应用程序的直接访问,从而强制执行通过 BIG-IP 的路径。

了解详细信息: Azure AD B2C 的标识保护和条件访问

测试登录注册流程

  1. 作为用户,请转到应用程序外部 URL。
  2. 此时会显示 BIG-IP 的 OAuth 客户端登录页。
  3. 使用授权码授权登录。 若要删除此步骤,请参阅 补充配置 部分。
  4. 注册并针对 Azure AD B2C 租户进行身份验证。

下图是用户登录对话框和登录欢迎页。

“用户登录”对话框的屏幕截图。

登录欢迎页的屏幕截图。

为了提高安全性,可以阻止对应用程序的直接访问,从而强制执行通过 BIG-IP 的路径。

补充配置

单一登出(SLO)

Azure AD B2C 支持标识提供者(IdP)和应用程序注销。请参阅“ 单一注销”。

若要实现 SLO,请让应用程序注销函数调用 Azure AD B2C 注销终结点。 然后,Azure AD B2C 会向 BIG-IP 发出最终的重定向。 此操作确保终止用户的应用程序 APM 会话。

替换 SLO 过程是在选择应用程序“退出登录”按钮时,使 BIG-IP 能够侦听请求。 检测到请求后,它会调用 Azure AD B2C 退出登录终结点。 此方法排除对应用程序进行更改。

要了解有关 iRules 的更多信息 BIG-IP,请访问 support.f5.com 网站,查询 K42052145:根据 URI 引用的文件名配置自动会话终止(注销)。

注释

无论采用哪种方法,请确保 Azure AD B2C 租户知道 APM 注销终结点。

  1. 在门户中,导航到 “管理>清单”。
  2. 找到属性 logoutUrl。 它显示为空值。
  3. 添加 APM 注销后的 URI:https://<mysite.com>/my.logout.php3

注释

<mysite.com> 是基于标头的应用的 BIG-IP FQDN。

优化的登录流

若要改善用户登录体验,请取消在Microsoft Entra 预身份验证之前显示的 OAuth 用户登录提示。

  1. 导航到“访问”“引导式配置”>

  2. 在行最右侧,选择 挂锁 图标。

  3. 基于标头的应用程序会解锁严格的配置。

    状态、名称和类型输入的屏幕截图;也是挂锁图标。

解锁严格配置可以防止对向导 UI 进行更改。 BIG-IP 对象与应用程序的已发布实例相关联,并且对直接管理开放。

  1. 导航到访问>配置文件/策略>访问配置文件(每会话策略)。

  2. 对于应用程序策略对象,在 “Per-Session 策略 ”列中,选择“ 编辑”。

    “访问策略”对话框中“访问策略”下的“编辑”选项的屏幕截图。

  3. 若要删除 OAuth 登录页 策略对象,请选择 X

  4. 在提示下,连接到上一个节点。

    OAuth 登录页策略对象上的 X 选项的屏幕截图。

  5. 在左上角,选择“ 应用访问策略”。

  6. 关闭视觉编辑器选项卡。

尝试连接到应用程序时,会显示 Azure AD B2C 登录页。

注释

如果重新启用严格模式并部署配置,则在引导式配置 UI 之外执行的设置将被覆盖。 通过手动为生产服务创建配置对象来实现此方案。

故障排除

如果阻止访问受保护的应用程序,请使用以下故障排除指南。

日志详细程度

BIG-IP 日志包含隔离身份验证和 SSO 问题的信息。 增加日志详细级别。

  1. 转到“访问策略”“概述”>“事件日志”“设置” 。
  2. 选择已发布应用程序的行,然后 编辑>访问系统日志
  3. 从 SSO 列表中,选择“调试”。
  4. 选择“确定”
  5. 在查看日志之前,请复制问题。

完成后,还原以前的设置。

BIG-IP 错误消息

如果在 Azure AD B2C 身份验证后看到 BIG-IP 错误消息,则问题可能与从 Microsoft Entra ID 到 BIG-IP 的 SSO 有关。

  1. 导航到 Access>概述>访问报表
  2. 运行最后一小时的报告
  3. 查看日志以获取线索。
  4. 选择 “查看会话变量 ”链接。
  5. 确定 APM 是否收到预期的 Microsoft Entra 声明。

无 BIG-IP 错误消息

如果未显示 BIG-IP 错误消息,则问题可能与后端请求或从 BIG-IP 到应用程序的 SSO 有关。

  1. 转到“访问策略”“概述”>“活动会话” 。
  2. 选择活动会话的链接。
  3. 选择 “视图变量” 链接。
  4. 审查以确定根本原因,特别是如果 BIG-IP APM 获得了不准确的会话属性。
  5. 使用应用程序日志帮助了解它是否以标头的形式收到属性。

引导式配置 v8 已知问题

如果使用引导式配置 v8,已知问题会在成功进行 Azure AD B2C 身份验证后生成以下错误。 问题可能是 AGC 在部署期间未启用自动 JWT 设置。 APM 无法获取当前的令牌签名密钥。 F5 工程师团队正在调查根本原因。

拒绝访问错误消息的屏幕截图。

相同的访问日志提供了详细信息。

日志消息详细信息的屏幕截图。

手动启用设置

  1. 导航到“访问”“引导式配置”>
  2. 在基于标头的应用程序行的最右侧,选择“挂锁”。
  3. 导航到“访问”“联合”>“OAuth 客户端/资源服务器”“提供程序”>>
  4. 选择 Azure AD B2C 配置的提供程序。
  5. 选中“ 使用自动 JWT ”框。
  6. 选择“发现”
  7. 选择“保存”
  8. “密钥”(JWT)字段具有 OpenID URI 元数据中的令牌签名证书密钥 ID(KID)。
  9. 在左上角,选择“ 应用访问策略”。
  10. 选择应用

有关详细信息,请转到 OAuth 客户端和资源服务器故障排除提示 techdocs.f5.com