跳转到内容
搜索文档

Generic OIDC

最后更新 查看 MarkdownAgent 设置

Cloudflare Access 提供通用 OpenID Connect (OIDC) 连接器,帮助您集成尚未在 Access 中预设的 IdP。

1. 在您的身份提供商中创建应用程序

  1. 访问您的身份提供商并创建客户端/应用程序。

  2. 创建客户端/应用程序时,您的 IdP 可能会请求授权重定向 URI。输入以下 URL:

    https://<your-team-name>.cloudflareaccess.com/cdn-cgi/access/callback

    您可以在 Cloudflare 仪表板Settings(设置)> Team name and domain(团队名称和域名)> **Team name(团队名称)**下找到您的团队名称。

  3. 复制以下字段的内容:

    • 客户端 ID
    • 客户端密钥
    • Auth URL:您的 IdP 的 authorization_endpoint URL
    • Token URL:您的 IdP 的 token_endpoint URL
    • Certificate URL:您的 IdP 的 jwks_uri 端点,允许 IdP 密钥对令牌进行签名

    您可以在身份提供商的 OIDC 发现端点上找到这些值。某些提供商将此称为"众所周知的 URL"。

2. 将 OIDC 提供商添加到 Cloudflare One

  1. Cloudflare 仪表板中,前往 Zero Trust > Integrations(集成) > Identity providers(身份提供商)

  2. Your identity providers(您的身份提供商) 下,选择 Add new identity provider(添加新的身份提供商)

  3. 选择 OpenID Connect

  4. 为您的身份提供商命名,并使用从您的身份提供商获取的信息填写必填字段。

  5. (可选)如果您的 IdP 支持该协议,请启用密钥交换验证(PKCE)。所有登录尝试都将执行 PKCE。

  6. (可选)要启用 SCIM,请参阅同步用户和组

  7. (可选)在 Optional configurations(可选配置) 下,输入您希望添加到用户身份的自定义 OIDC 声明。此信息将在用户身份端点中可用。

  8. 选择 Save(保存)

身份提供商端点发送 POST 请求:

Required API token permissions

At least one of the following token permissions is required:
  • Access: Organizations, Identity Providers, and Groups Write
Add an Access identity providerbash
curl "https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/access/identity_providers" \
	--request POST \
	--header "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \
	--json '{
		"name": "Generic OIDC example",
		"type": "oidc",
		"config": {
				"client_id": "<your client id>",
				"client_secret": "<your client secret>",
				"auth_url": "https://accounts.google.com/o/oauth2/auth",
				"token_url": "https://accounts.google.com/o/oauth2/token",
				"certs_url": "https://www.googleapis.com/oauth2/v3/certs",
				"pkce_enabled": false,
				"email_claim_name": "email",
				"claims": [
						"employeeID",
						"groups"
				],
				"scopes": [
						"openid",
						"email",
						"profile"
				]
		}
	}'
  1. 将以下权限添加到您的 cloudflare_api_token

    • Access: Organizations, Identity Providers, and Groups Write
  2. 配置 cloudflare_zero_trust_access_identity_provider 资源:

    resource "cloudflare_zero_trust_access_identity_provider" "generic_oidc_example" {
    	account_id = var.cloudflare_account_id
    	name       = "Generic OIDC example"
    	type       = "oidc"
    	config 		 = {
    		client_id = "<your client id>"
    		client_secret = "<your client secret>"
    		auth_url = "https://accounts.google.com/o/oauth2/auth"
    		token_url = "https://accounts.google.com/o/oauth2/token"
    		certs_url = "https://www.googleapis.com/oauth2/v3/certs"
    		pkce_enabled = false
    		email_claim_name = "email"
    		claims = ["employeeID", "groups"]
    		scopes = ["openid", "email", "profile"]
    	}
    }

3. 测试连接

要测试连接是否正常,请前往 Authentication(身份验证) > Login methods(登录方式),然后选择您要测试的登录方式旁边的 Test(测试)。成功后将显示确认屏幕。

同步用户和组

通用 OIDC 集成允许您使用 SCIM 同步用户组并自动取消用户配置。

前提条件

您的身份提供商必须支持 SCIM 2.0 版本。

1. 在 Cloudflare One 中启用 SCIM

  1. Cloudflare 仪表板中,前往 Zero Trust > Integrations(集成) > Identity providers

  2. 找到 IdP 集成,然后选择 Edit(编辑)

  3. 开启 Enable SCIM

  4. (可选)配置以下设置:

  • Enable user deprovisioning(启用用户取消预配):当用户从 IdP 中的 SCIM 应用程序中移除时,撤销用户的活动会话。这将使所有活动 Access 会话失效,并提示对任何 Cloudflare One Client 会话策略重新进行身份验证。
  • Remove user seat on deprovision(取消预配时移除用户席位):当用户从 IdP 中的 SCIM 应用程序中移除时,从您的 Cloudflare One 账户中移除用户席位
  • SCIM identity update behavior(SCIM 身份更新行为):选择当用户身份在 IdP 中更新时,Cloudflare One 中发生的情况。
    • Automatic identity updates:当 IdP 通过 SCIM 发送更新的身份或组成员资格时,自动更新用户注册表身份。此身份用于 Gateway 策略和 Cloudflare One Client 设备配置文件;Access 将在用户重新进行身份验证时读取其更新的身份。
    • Group membership change reauthentication:当用户的组成员资格在 IdP 中更改时,撤销用户的活动会话。这将使所有活动 Access 会话失效,并提示对任何 Cloudflare One Client 会话策略重新进行身份验证。Access 将在用户重新进行身份验证时读取其更新的组成员资格。
    • No action:在用户下次对 Access 或 Cloudflare One Client 重新进行身份验证时更新用户身份。
  1. 选择 Regenerate Secret(重新生成密钥)。复制 SCIM Endpoint(SCIM 终结点)SCIM Secret(SCIM 密钥)。您需要将这些值输入到 IdP 中。

  2. 选择 Save(保存)

SCIM 密钥永不过期,但您可以随时手动重新生成密钥。

2. 在 IdP 中配置 SCIM

设置说明因身份提供商而异。在您的身份提供商中,您需要编辑原始 SSO 应用程序或创建新的 SCIM 应用程序。详情请参阅您的身份提供商文档。示例说明请参阅我们的 OktaJumpcloud 指南。

IdP 组

如果您希望根据 IdP 组构建策略:

  • 确保您的 IdP 发送 groups 字段,命名必须完全匹配(不区分大小写)。所有其他值将作为 OIDC 声明发送。
  • 如果您的 IdP 需要创建新的 SCIM 应用程序,请确保 SCIM 应用程序中的组与原始 SSO 应用程序中的组匹配。由于 SCIM 组成员身份更新会覆盖用户身份中的任何组,因此为每个应用程序分配相同的组可确保策略评估的一致性。

3. 验证 SCIM 预配

要检查用户身份是否已在 Cloudflare One 中更新,请查看您的 SCIM 配置日志

可选配置

自定义 OIDC 声明

所有 OIDC IdP 集成都支持使用自定义 OIDC 声明。配置后,Access 将把这些声明添加到 Access JWT 中,供您的源服务使用。您可以在 Access 策略Gateway 策略中引用自定义 OIDC 声明,从而基于自定义身份属性控制用户对应用程序的访问。

向 IdP 集成添加自定义 OIDC 声明的步骤:

  1. 在您的身份提供商中,确保自定义声明已包含在您的 OIDC ID 令牌中。

  2. Cloudflare 仪表板中,前往 Zero Trust > Integrations(集成) > Identity providers(身份提供商)

  3. Your identity providers(您的身份提供商) 下,找到您的身份提供商并选择 Edit(编辑)

  4. OIDC Claims(OIDC 声明) 下,输入您的自定义声明名称(例如 oid)。

  5. 选择 Save(保存)

  6. 选择 Test(测试),验证自定义声明是否出现在 oidc_fields 中。例如:

    	"oidc_fields": {
    		"oid": "54eb1ed2-7150-44e6-bbe4-ead24c132fd4"
    	},

现在,您可以使用 OIDC 声明IdP OIDC 声明选择器为自定义声明构建 Access 策略。您还可以将自定义 OIDC 声明用作 Gateway 策略中基于身份的选择器。自定义声明将通过 JWT 传递给 Access 后面的源服务。

电子邮件声明

您可以指定自定义电子邮件声明名称,Access 将使用该名称来识别用户电子邮件。如果您的 IdP 在 OIDC ID 令牌中不返回标准的 email 声明,这将非常有用。

多记录 OIDC 声明

Cloudflare Access 扩展了对多记录 OIDC 声明的支持。这些声明会被解析出来,并可在策略中单独引用。此功能可实现对应用程序的细粒度访问控制和精确的用户授权。

Cloudflare Access 不支持部分 OIDC 声明值引用或 OIDC 范围。

通用 OIDC 令牌支持的算法

Cloudflare 支持以下用于验证通用 OIDC 令牌的算法:

  • RS512
  • RS256
  • PS512
  • ES256
  • ES384
  • ES512

这篇文档对您有帮助吗?