IdP 联合允许拥有多个 Cloudflare 账户的组织在账户之间使用单个身份提供程序 (IdP) 配置。您不需要在每个账户中分别配置相同的 IdP(例如 Okta 或 Entra ID),而是可以在源账户中配置一次,然后与组织中的其他账户共享它。
每个接收账户都会获得一个只读的 IdP 连接,该连接通过桥接(bridge)—— 源账户中经纪跨账户登录的隐藏应用程序 —— 将身份验证路由回源账户。最终用户使用其现有的 IdP 凭据登录,并且每个账户的 Access 策略评估生成的身份,就像任何其他 IdP 登录一样。
设置 IdP 联合是一个包含两个步骤的过程:
- Create a federation grant(创建联合授权)。 授权允许跨账户共享 IdP。创建授权还会在源账户中预配一个隐藏的桥接应用程序。
- 共享授权。 将授权分发给特定的账户或整个组织。每个接收账户都会自动预配一个指向桥接的只读 IdP 连接。
当接收账户中的用户进行身份验证时,请求会通过桥接路由到源 IdP。源 IdP 处理身份验证,并且生成的身份声明会被传回接收账户的 Access 策略。
- 您必须在源账户中拥有编辑源 IdP 的权限。
- 您必须是 Cloudflare 组织的成员。
- 源账户必须属于 Cloudflare 组织。
仪表板将授权创建和共享结合到单个流程中。如果该 IdP 已经存在联合授权,则会重复使用它;否则,会自动创建一个。
- 在 Cloudflare 仪表板 ↗中,转到 Zero Trust > Integrations(集成) > Identity providers(身份提供商)。
- 找到您要共享的 IdP 并选择三点菜单。
- 选择 Share(共享)。
- 选择要与之共享 IdP 的接收账户。
- 审查共享配置并选择 Confirm(确认)。
IdP 会自动共享到选定的账户。每个接收账户都会收到一个指向源账户中桥接的只读 IdP 连接。
通过 API 共享 IdP 是一个包含两个步骤的过程:创建联合授权,然后与特定账户或整个组织共享。
curl "https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/access/idp_federation_grants" \
--request POST \
--header "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \
--json '{
"idp_id": "<IDP_UUID>"
}'响应中包含授权 id,您将在下一步中使用它。要列出您账户中的所有联合授权:
curl "https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/access/idp_federation_grants" \
--request GET \
--header "Authorization: Bearer $CLOUDFLARE_API_TOKEN"您可以与特定账户或整个 Cloudflare 组织共享授权。在 recipients 数组中,使用以下字段之一来针对每个接收者:
recipient_account_id:与单个账户共享 IdP。为您要添加的每个账户重复该字段。organization_id:与您 Cloudflare 组织中的每个账户共享 IdP。
每个接收者只能指定这些字段之一。如果两者均未提供,默认情况下授权将与您的整个组织共享。
要与一个或多个特定账户共享授权:
curl "https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/shares" \
--request POST \
--header "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \
--json '{
"name": "Identity provider: OpenID Connect",
"recipients": [
{
"recipient_account_id": "<RECIPIENT_ACCOUNT_ID>"
}
],
"resources": [
{
"resource_account_id": "<SOURCE_ACCOUNT_ID>",
"resource_id": "<GRANT_ID>",
"resource_type": "idp-federation-grant",
"meta": {}
}
]
}'要与您组织中的每个账户共享授权,请将 recipients 数组替换为您的组织 ID:
curl "https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/shares" \
--request POST \
--header "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \
--json '{
"name": "Identity provider: OpenID Connect",
"recipients": [
{
"organization_id": "<ORGANIZATION_ID>"
}
],
"resources": [
{
"resource_account_id": "<SOURCE_ACCOUNT_ID>",
"resource_id": "<GRANT_ID>",
"resource_type": "idp-federation-grant",
"meta": {}
}
]
}'每个接收账户都会自动预配一个指向桥接的只读 IdP 连接。当您与组织共享时,组织中的每个账户都会收到该连接。
要停止共享 IdP,请删除联合授权以及共享。
仪表板将授权和共享删除整合到单个流程中。
- 在 Cloudflare 仪表板 ↗中,转到 Zero Trust > Integrations(集成) > Identity providers(身份提供商)。
- 找到共享的 IdP并选择三点菜单。
- 选择 Unshare(取消共享)。
- 确认操作。
通过 API 解除 IdP 联合是一个包含两个步骤的过程。删除授权可停止共享,并从接收账户中移除只读 IdP。之后您可以选择清理共享记录。
curl "https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/access/idp_federation_grants/$GRANT_ID" \
--request DELETE \
--header "Authorization: Bearer $CLOUDFLARE_API_TOKEN"curl "https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/shares/$SHARE_ID" \
--request DELETE \
--header "Authorization: Bearer $CLOUDFLARE_API_TOKEN"- 一个账户最多可以联合一个 IdP 作为源。
- 在源 IdP 关联有联合授权时,无法将其删除。请先删除授权。