跳转到内容
搜索文档

IdP 联合

最后更新 查看 MarkdownAgent 设置

IdP 联合允许拥有多个 Cloudflare 账户的组织在账户之间使用单个身份提供程序 (IdP) 配置。您不需要在每个账户中分别配置相同的 IdP(例如 Okta 或 Entra ID),而是可以在源账户中配置一次,然后与组织中的其他账户共享它。

每个接收账户都会获得一个只读的 IdP 连接,该连接通过桥接(bridge)—— 源账户中经纪跨账户登录的隐藏应用程序 —— 将身份验证路由回源账户。最终用户使用其现有的 IdP 凭据登录,并且每个账户的 Access 策略评估生成的身份,就像任何其他 IdP 登录一样。

工作原理

设置 IdP 联合是一个包含两个步骤的过程:

  1. Create a federation grant(创建联合授权)。 授权允许跨账户共享 IdP。创建授权还会在源账户中预配一个隐藏的桥接应用程序。
  2. 共享授权。 将授权分发给特定的账户或整个组织。每个接收账户都会自动预配一个指向桥接的只读 IdP 连接。

当接收账户中的用户进行身份验证时,请求会通过桥接路由到源 IdP。源 IdP 处理身份验证,并且生成的身份声明会被传回接收账户的 Access 策略。

前提条件

  • 您必须在源账户中拥有编辑源 IdP 的权限。
  • 您必须是 Cloudflare 组织的成员。
  • 源账户必须属于 Cloudflare 组织。

共享 IdP

仪表板将授权创建和共享结合到单个流程中。如果该 IdP 已经存在联合授权,则会重复使用它;否则,会自动创建一个。

  1. Cloudflare 仪表板中,转到 Zero Trust > Integrations(集成) > Identity providers(身份提供商)
  2. 找到您要共享的 IdP 并选择三点菜单。
  3. 选择 Share(共享)
  4. 选择要与之共享 IdP 的接收账户。
  5. 审查共享配置并选择 Confirm(确认)

IdP 会自动共享到选定的账户。每个接收账户都会收到一个指向源账户中桥接的只读 IdP 连接。

通过 API 共享 IdP 是一个包含两个步骤的过程:创建联合授权,然后与特定账户或整个组织共享。

1. 创建联合授权

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"

2. 共享授权

您可以与特定账户或整个 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

要停止共享 IdP,请删除联合授权以及共享。

仪表板将授权和共享删除整合到单个流程中。

  1. Cloudflare 仪表板中,转到 Zero Trust > Integrations(集成) > Identity providers(身份提供商)
  2. 找到共享的 IdP并选择三点菜单。
  3. 选择 Unshare(取消共享)
  4. 确认操作。

通过 API 解除 IdP 联合是一个包含两个步骤的过程。删除授权可停止共享,并从接收账户中移除只读 IdP。之后您可以选择清理共享记录。

1. 删除联合授权

curl "https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/access/idp_federation_grants/$GRANT_ID" \
	--request DELETE \
	--header "Authorization: Bearer $CLOUDFLARE_API_TOKEN"

2. (可选)删除共享

curl "https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/shares/$SHARE_ID" \
	--request DELETE \
	--header "Authorization: Bearer $CLOUDFLARE_API_TOKEN"

限制

  • 一个账户最多可以联合一个 IdP 作为源。
  • 在源 IdP 关联有联合授权时,无法将其删除。请先删除授权。

这篇文档对您有帮助吗?