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

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

了解将 Azure Active Directory B2C (Azure AD B2C) 与 F5 BIG-IP 访问策略管理器 (APM) 集成。 可以通过 BIG-IP 安全性、Azure AD B2C 预身份验证、条件访问 (CA) 和单一登录 (SSO) 将旧应用程序安全地公开在 Internet 上。 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 连接 (OIDC) 授权服务器,用于验证用户凭据、多重身份验证和到 BIG-IP APM 的 SSO
  • BIG-IP - 应用程序的反向代理。 BIG-IP APM 是 OIDC 客户端,在将基于标头的 SSO 委托给后端服务之前,将身份验证委托给 OIDC 授权服务器。

下图演示了此方案的服务提供商 (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 配置

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

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

创建自定义特性

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

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

  1. 以全局管理员身份登录到 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 的教程:在 Azure AD B2C 中注册 Web 应用

BIG-IP 配置

对于 BIG-IP 配置,请使用引导式配置版本 7/8。 工作流框架是为访问拓扑而定制的,它可以实现快速的 Web 服务发布。

引导式配置版本

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

要升级引导式配置,请访问 my.f5.com 获取 K85454683:升级 BIG-IP 系统上的 F5 BIG-IP 引导式配置

SSL 配置文件

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

要在 BIG-IP VE 中添加和管理证书,请访问 techdocs.f5.com 了解 BIG-IP 系统:SSL 管理

引导式配置

  1. 要启动部署向导,请在 web 配置中,转到“访问”>“引导式配置”。
  2. 选择“联合”>“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 客户端,因此请选择“客户端”选项。

DNS 解析程序

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

提供程序设置

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

添加新的提供商并对其进行配置:

OAuth 常规属性

属性 说明
OAuth 提供程序类型 自定义
选择 OAuth 提供程序 新建或使用 OAuth 提供程序
名称 B2C IdP 的显示名称。 此名称在用户登录时显示为提供程序选项
令牌类型 JSON Web 令牌

OAuth 策略设置

属性 说明
作用域 留空。 用户登录的 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 元数据。
属性 说明
目标受众 表示 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 请求。 但是,请求格式不正确,并且缺少重要参数。 所以,我们手动创建了它们。

令牌请求:已启用

属性 说明
选择 OAuth 请求 新建
HTTP 方法 POST
启用头 未选中
启用参数 已选中
参数 参数名称 参数值
client_id client_id 不适用
nonce nonce 不适用
redirect_uri redirect_uri 不适用
scope scope 不适用
response_type response_type 不适用
client_secret client_secret 不适用
自定义 grant_type authorization_code

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

属性 说明
选择 OAuth 请求 新建
HTTP 方法 GET
提示类型
启用头 未选中
启用参数 已选中
参数 参数名称 参数值
client_id client_id 不适用
redirect_uri redirect_uri 不适用
response_type response_type 不适用
scope scope 不适用
nonce nonce 不适用

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

OpenID UserInfo 请求禁用全局 Azure AD B2C 租户不支持。

虚拟服务器属性

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

属性 说明
目标地址 成为后端应用程序的 BIG-IP 服务终结点的专用或公共 IP
服务端口 HTTPS
启用重定向端口 选择以使用户自动从 http 重定向到 https
重定向端口 HTTP
客户端 SSL 配置文件 将预定义的 clientssl 配置文件与具有 SSL 证书的配置文件交换。 可以使用默认配置文件进行测试。 但它可能会引起浏览器警报。

池属性

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

属性 说明
负载均衡方法 选择轮循机制
池服务器 后端应用的内部 IP
端口 后端应用的服务端口

注意

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

SSO 设置

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

属性 说明
头操作 插入
标头名称 name
标头值 %{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),它可以安全地终止会话,从而降低未经授权访问的风险。

部署设置

选择“部署”以提交设置并创建 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 退出登录终结点。 这种方法排除了对应用程序进行更改。

要了解更多 BIG-IP iRules,转到 support.f5.com 以获取 K42052145:根据 URI 引用的文件名配置自动会话终止(注销)

注意

无论采用何种方法,请确保 Azure AD B2C 租户了解 APM 退出登录终结点。

  1. 在门户中,导航到“管理”>“清单”。
  2. 找到 logoutUrl 属性。 它读为 null。
  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. 对于应用程序策略对象,在“每会话策略”列中,选择“编辑”。

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

  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. 导航到“访问”>“概述”>“访问报告” 。
  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. 选择应用

有关更多信息,请访问 techdocs.f5.com 获取 OAuth 客户端和资源服务器故障排除提示