你当前正在访问 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 轻松配置对所有应用程序的安全访问
先决条件
要开始,需要:
- Azure 订阅
- 如果没有,获取一个 Azure 免费帐户
- 一个关联到 Azure 订阅的 Azure AD B2C 租户
- 在 Azure 上部署 BIG-IP 或试用版 BIG-IP 虚拟环境 (VE)
- 以下任意 F5 BIG-IP 许可证:
- F5 BIG-IP® Best 捆绑包
- F5 BIG-IP Access Policy Manager™ 独立许可证
- BIG-IP F5 BIG-IP® Local Traffic Manager™ (LTM) 上的 F5 BIG-IP Access Policy Manager™ 加载项许可证
- 90 天的 BIG-IP 完整功能试用版许可证
- 用于测试的基于标头的 Web 应用程序或 IIS 应用
- 请参阅,设置 IIS 应用
- 通过 HTTPS 发布服务的 SSL 证书,或在测试时使用默认证书
- 请参阅 SSL 配置文件
方案描述
下面的方案基于标头,但可以使用这些方法来实现 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) 发起的流。
- 用户连接到应用程序终结点。 BIG-IP 是服务提供商。
- BIG-IP APM OIDC 客户端将用户重定向到 Azure AD B2C 租户终结点(OIDC 授权服务器)
- Azure AD B2C 租户对用户进行预身份验证,并应用条件访问策略
- Azure AD B2C 使用授权代码将用户重定向回 SP
- OIDC 客户端要求授权服务器使用授权代码交换 ID 令牌
- BIG-IP APM 授予用户访问权限,并在转发到应用程序的客户端请求中注入 HTTP 头
Azure AD B2C 配置
若要使用 Azure AD B2C 身份验证启用 BIG-IP,请使用具有用户流或自定义策略的 Azure AD B2C 租户。
请参阅,教程:在 Azure AD B2C 中创建用户流和自定义策略
创建自定义特性
从 Azure AD B2C 用户对象、联合 IdP、API 连接器或用户注册中获取自定义属性。 在指向应用的令牌中包含属性。
旧应用程序需要特定属性,因此请将它们包含在用户流中。 可以将它们替换为应用程序所需的属性。 或者,如果正在使用说明设置测试应用,那么请使用任何标头。
- 以全局管理员身份登录到 Azure 门户。
- 在左侧窗格中,选择“用户属性”。
- 选择“添加”以创建两个自定义属性。
- 对于代理 ID,选择字符串数据类型。
- 对于代理位置,选择字符串数据类型。
向用户流添加属性
- 在左侧菜单中,导航至“策略”>“用户流”。
- 选择策略,例如 B2C_1_SignupSignin。
- 选择“用户属性”。
- 添加两个自定义属性。
- 添加“显示名称”属性。 这些属性是在用户注册期间收集的。
- 选择“应用程序声明” 。
- 添加两个自定义属性。
- 添加“显示名称”。 这些属性会转到 BIG-IP。
- 选择“运行用户流”。
- 在用户流菜单的左侧导航栏上,验证已定义属性的提示。
了解详细信息:教程:在 Azure AD B2C 中创建用户流和自定义策略
Azure AD B2C 联合
联合 BIG-IP 和 Azure AD B2C 以实现相互信任。 在 Azure AD B2C 租户中注册 BIG-IP 作为 OIDC 应用程序。
- 在门户中,选择“应用注册”>“新注册”。
- 输入应用名称,例如 HeaderApp1。
- 在“支持的帐户类型”下,选择“任何标识提供者或组织目录中的帐户(用于通过用户流对用户进行身份验证)” 。
- 在“重定向 URI”下选择“Web”。
- 输入受保护的服务公共 FQDN。
- 输入路径。
- 保留剩余的选择。
- 选择“注册”。
- 导航到“证书&机密”>“+ 新建客户端密码”。
- 输入描述性名称
- 输入 BIG-IP 使用密码的 TTL。
- 注意 BIG-IP 配置的客户端密码。
重定向 URI 是 BIG-IP 终结点。 身份验证后,授权服务器 (Azure AD B2C) 将用户发送到终结点。
了解更多:适用于 Azure AD B2C 的教程:在 Azure AD B2C 中注册 Web 应用。
BIG-IP 配置
对于 BIG-IP 配置,请使用引导式配置版本 7/8。 工作流框架是为访问拓扑而定制的,它可以实现快速的 Web 服务发布。
引导式配置版本
- 要确认版本,请使用管理员帐户登录 BIG-IP web 配置。
- 转到“访问”>“引导式配置”。
- 版本显示在右上角。
要升级引导式配置,请访问 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 管理。
引导式配置
- 要启动部署向导,请在 web 配置中,转到“访问”>“引导式配置”。
- 选择“联合”>“F5 作为 OAuth 客户端和资源服务器”。
- 观察此方案的流摘要。
- 选择“下一步” 。
- 随即启动向导。
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 信息(如签名证书变换)的元数据终结点。
- 找到 Azure AD B2C 租户的元数据终结点。导航到“应用注册”>“终结点”。
- 复制 Azure AD B2C OpenID Connect 元数据文档 URI。 例如,
https://wacketywackb2c .b2clogin.com/<tenantname>.onmicrosoft.com/<policyname>/v2.0/.well-known/openid-configuration
。 - 然后使用属性更新 URI,
https://<tenantname>.b2clogin.com/WacketywackB2C.onmicrosoft.com/B2C_1_SignUpIn/v2.0/.well-known/openid-configuration
。 - 将 URI 粘贴到浏览器中。
- 查看 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 的标识保护和条件访问
测试登录注册流程
- 作为用户,转到应用程序外部 URL。
- 此时将显示 BIG-IP 的 OAuth 客户端登录页面。
- 使用授权码授权登录。 要删除此步骤,请参阅补充配置部分。
- 注册并针对 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 退出登录终结点。
- 在门户中,导航到“管理”>“清单”。
- 找到
logoutUrl
属性。 它读为 null。 - 添加 APM 注销后的 URI:
https://<mysite.com>/my.logout.php3
注意
<mysite.com>
是基于标头的应用的 BIG-IP FQDN。
优化登录流
若要改善用户登录体验,请抑制显示在 Microsoft Entra 预身份验证之前的 OAuth 用户登录提示。
导航到“访问”>“引导式配置”。
在行的最右侧,选择“挂锁”图标。
基于标头的应用程序会解锁严格的配置。
解锁严格配置可以防止对向导 UI 进行更改。 BIG-IP 对象与应用的已发布实例相关联,并且是开放的以供直接管理。
导航到“访问”>“配置文件/策略”>“访问配置文件(每会话策略)”。
对于应用程序策略对象,在“每会话策略”列中,选择“编辑”。
要删除 OAuth 登录页策略对象,请选择 X。
在提示下,连接到上一个节点。
在左上角,选择“应用访问策略”。
关闭可视化编辑器选项卡。
尝试连接到应用程序时,会显示 Azure AD B2C 登录页面。
注意
如果重新启用严格模式并部署配置,则在引导式配置 UI 之外执行的设置将被覆盖。 通过手动为生产服务创建配置对象来实现此方案。
故障排除
如果无法访问受保护的应用程序,请使用以下疑难解答指南。
日志详细程度
BIG-IP 日志具有隔离身份验证和 SSO 问题的信息。 增加日志详细级别。
- 转到“访问策略”>“概述”>“事件日志”>“设置” 。
- 选择已发布的应用程序所在的行,然后选择“编辑”>“访问系统日志” 。
- 从 SSO 列表中,选择“调试”。
- 选择“确定”。
- 在查看日志之前,请复制问题。
完成后,恢复以前的设置。
BIG-IP 错误消息
如果在 Azure AD B2C 身份验证后看到 BIG-IP 错误消息,则该问题可能与从 Microsoft Entra ID 到 BIG-IP 的 SSO 有关。
- 导航到“访问”>“概述”>“访问报告” 。
- 运行最后一小时的报告
- 查看日志以获取线索。
- 选择“查看会话变量”链接。
- 确定 APM 是否收到预期的 Microsoft Entra 声明。
无 BIG-IP 错误消息
如果没有出现 BIG-IP 错误消息,则问题可能与后端请求或从 BIG-IP 到应用程序的 SSO 有关。
- 转到“访问策略”>“概述”>“活动会话” 。
- 选择活动会话的链接。
- 选择“查看变量”链接。
- 审查以确定根本原因,特别是如果 BIG-IP APM 获得了不准确的会话属性。
- 使用应用程序日志来帮助了解它是否接收到作为标头的属性。
引导式配置 v8 已知问题
如果使用引导式配置 v8,则在 Azure AD B2C 身份验证成功后,已知问题会生成以下错误。 问题可能是 AGC 在部署期间未启用自动 JWT 设置。 APM 无法获取当前的令牌签名密钥。 F5 工程正在调查根本原因。
相同的访问日志提供了详细信息。
手动启用设置
- 导航到“访问”>“引导式配置”。
- 在基于标头的应用程序行的最右侧,选择“挂锁”。
- 导航到“访问”>“联合”>“OAuth 客户端/资源服务器”>“提供程序”。
- 选择 Azure AD B2C 配置提供程序。
- 选中“使用自动 JWT”框。
- 选择“发现”。
- 选择“保存”。
- 密钥 (JWT) 字段具有来自 OpenID URI 元数据的令牌签名证书密钥 ID(KID)。
- 在左上角,选择“应用访问策略”。
- 选择应用。
有关更多信息,请访问 techdocs.f5.com 获取 OAuth 客户端和资源服务器故障排除提示