跳转到内容
搜索文档

创建 OAuth 客户端

最后更新 查看 MarkdownAgent 设置

前提条件

要创建 OAuth 客户端,您必须对关联账户拥有以下角色之一:Super Administrator、Administrator 或 OAuth Client Write。

  1. 登录 Cloudflare 仪表板。
  2. 选择您的账户。
  3. 前往 Manage Account(管理账户) > OAuth clients(OAuth 客户端)
  4. 选择 Create client(创建客户端)
  5. 输入所需的配置详细信息:
    • Client name(客户端名称)
    • Response type(响应类型)
    • Grant type(授权类型)
    • Token authentication method(令牌身份验证方法)
    • Redirect URLs(重定向 URL)
  6. 可选:添加非必填字段。
  7. 选择 Continue(继续) 并定义客户端所需的作用域。
  8. 选择 Create client(创建客户端)
  9. Client ID(客户端 ID)Client Secret(客户端密钥) 保存到安全位置。
Go to OAuth clients ↗

要通过 Cloudflare API 创建 OAuth 客户端,请创建具有 OAuth Clients Write 权限的 API 令牌。

curl -X POST "https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/oauth_clients" \
	-H "Content-Type: application/json" \
	-H "Authorization: Bearer $API_TOKEN" \
	-d '{
		"client_name": "Cloudflare OAuth Client",
		"grant_types": ["authorization_code"],
		"redirect_uris": ["https://example.com/oauth/callback"],
		"scopes": ["workers-platform.read"],
		"post_logout_redirect_uris": ["https://example.com/logout"],
		"response_types": ["code"],
		"token_endpoint_auth_method": "client_secret_basic",
		"logo_uri": "https://example.com/logo.png",
		"policy_uri": "https://example.com/policy",
		"tos_uri": "https://example.com/tos",
		"client_uri": "https://example.com",
		"allowed_cors_origins": ["https://example.com"]
	}'

选择作用域

OAuth 作用域名称对应 Cloudflare API 令牌权限名称。使用 Cloudflare API 文档确定客户端所需的权限。

创建或编辑 OAuth 客户端时,会显示所有可用作用域。搜索并选择客户端所需的作用域。

从 API 获取可用作用域。通过 API 创建客户端时使用作用域 ID。

curl "https://api.cloudflare.com/client/v4/oauth/scopes" \
	-H "Content-Type: application/json" \
	-H "Authorization: Bearer $API_TOKEN"

支持的 OAuth 流程

Cloudflare OAuth 客户端支持 OAuth 2.0 Authorization Code 流程。

Cloudflare 不支持 Client Credentials、Implicit、Resource Owner Password Credentials、Device Authorization 或其他 OAuth 授权类型用于第三方客户端。

选择流程

使用以下指南选择 OAuth 流程:

客户端类型 流程 令牌端点身份验证 PKCE
服务端 Web 应用或后端服务 带客户端密钥的 Authorization Code client_secret_basicclient_secret_post 可选/非必需
基于浏览器的、移动、桌面或 CLI 应用 带 PKCE 的 Authorization Code none 必需,S256

客户端密钥

Authorization Code 流程适用于能够保护客户端密钥不被泄露的安全服务端应用程序。

  • 适用场景: OAuth 客户端是服务端 Web 应用程序或后端服务。
  • 工作原理: 客户端将用户重定向到授权页面。授权后,Cloudflare 向您的后端返回授权码。您的后端使用授权码和客户端密钥交换访问令牌。
  • 安全提示: 切勿在客户端代码中暴露客户端密钥,也不要将其嵌入移动客户端二进制文件中。

PKCE

Proof Key for Code Exchange (PKCE) 扩展了 Authorization Code 流程,适用于无法安全存储客户端密钥的公共客户端,例如移动或单页应用。

  • 适用场景: OAuth 客户端是单页、移动、桌面或 CLI 应用程序。
  • 工作原理: 应用程序为每次登录请求生成唯一的 code verifier 和 code challenge,而不是使用静态客户端密钥。
  • 安全提示: 使用 PKCE 的客户端不需要客户端密钥。

私有和公共客户端

新的 OAuth 客户端默认为私有可见性。私有客户端只能由父 Cloudflare 账户的成员授权。公共客户端允许任何 Cloudflare 用户授权。

在将客户端设为公共之前,请完成所需操作并填写必填字段。

必填字段

  • Client name
  • Logo
  • Client URL
  • Scopes

所需操作

OAuth 客户端必须完成域名验证以验证客户端 URL 的域名所有权,然后才能设为公共。

将客户端提升为公共

  1. 前往 Manage Account(管理账户) > OAuth clients(OAuth 客户端)
  2. 打开客户端的操作菜单。
  3. 选择 Change Visibility(更改可见性)
Go to OAuth clients ↗
curl -X PATCH "https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/oauth_clients/$CLIENT_ID" \
	-H "Content-Type: application/json" \
	-H "Authorization: Bearer $API_TOKEN" \
	-d '{ "visibility": "public" }'

客户端 URL 域名所有权验证

Cloudflare 要求验证客户端 URL 的域名所有权,客户端才能设为公共。如果客户端仅供账户成员私有使用,则不需要域名所有权验证。

复制验证代码,并在 DNS 配置中创建包含该值的 TXT 记录。记录必须包含所有文本,包括 cloudflare_oauth_client_publisher= 前缀。

Cloudflare 会轮询此 DNS 记录,直到找到该记录或请求在两天后超时。

重新开始验证

如果验证过程超时,请在客户端操作菜单中选择 Restart verification(重新开始验证)

要重新开始失败或超时的验证,请发送 PATCH 请求,保持现有 client_uri 不变。

curl -X PATCH "https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/oauth_clients/$CLIENT_ID" \
	-H "Content-Type: application/json" \
	-H "Authorization: Bearer $API_TOKEN" \
	-d '{ "client_uri": "https://example.com" }'

轮换客户端密钥

每个客户端可以有两个密钥。这使您可以创建新密钥,更新客户端以使用新密钥,然后删除旧密钥。

  1. 前往 Manage Account(管理账户) > OAuth clients(OAuth 客户端)
  2. 打开客户端的操作菜单。
  3. 选择 Rotate client secret(轮换客户端密钥)
  4. 将新密钥保存到安全位置。
  5. 客户端使用新密钥后,删除旧密钥。
Go to OAuth clients ↗

要检查客户端是否正在轮换密钥,请在 GET 响应中查找 has_rotated_secret。如果值为 true,请在创建另一个密钥之前删除旧密钥。

创建新密钥

curl -X POST "https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/oauth_clients/$CLIENT_ID/rotate_secret" \
	-H "Content-Type: application/json" \
	-H "Authorization: Bearer $API_TOKEN"

删除旧密钥

curl -X DELETE "https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/oauth_clients/$CLIENT_ID/rotate_secret" \
	-H "Content-Type: application/json" \
	-H "Authorization: Bearer $API_TOKEN"

这篇文档对您有帮助吗?