要创建 OAuth 客户端,您必须对关联账户拥有以下角色之一:Super Administrator、Administrator 或 OAuth Client Write。
- 登录 Cloudflare 仪表板。
- 选择您的账户。
- 前往 Manage Account(管理账户) > OAuth clients(OAuth 客户端)。
- 选择 Create client(创建客户端)。
- 输入所需的配置详细信息:
- Client name(客户端名称)
- Response type(响应类型)
- Grant type(授权类型)
- Token authentication method(令牌身份验证方法)
- Redirect URLs(重定向 URL)
- 可选:添加非必填字段。
- 选择 Continue(继续) 并定义客户端所需的作用域。
- 选择 Create client(创建客户端)。
- 将 Client ID(客户端 ID) 和 Client Secret(客户端密钥) 保存到安全位置。
要通过 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"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_basic 或 client_secret_post |
可选/非必需 |
| 基于浏览器的、移动、桌面或 CLI 应用 | 带 PKCE 的 Authorization Code | none |
必需,S256 |
Authorization Code 流程适用于能够保护客户端密钥不被泄露的安全服务端应用程序。
- 适用场景: OAuth 客户端是服务端 Web 应用程序或后端服务。
- 工作原理: 客户端将用户重定向到授权页面。授权后,Cloudflare 向您的后端返回授权码。您的后端使用授权码和客户端密钥交换访问令牌。
- 安全提示: 切勿在客户端代码中暴露客户端密钥,也不要将其嵌入移动客户端二进制文件中。
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 的域名所有权,然后才能设为公共。
- 前往 Manage Account(管理账户) > OAuth clients(OAuth 客户端)。
- 打开客户端的操作菜单。
- 选择 Change Visibility(更改可见性)。
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" }'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" }'每个客户端可以有两个密钥。这使您可以创建新密钥,更新客户端以使用新密钥,然后删除旧密钥。
- 前往 Manage Account(管理账户) > OAuth clients(OAuth 客户端)。
- 打开客户端的操作菜单。
- 选择 Rotate client secret(轮换客户端密钥)。
- 将新密钥保存到安全位置。
- 客户端使用新密钥后,删除旧密钥。
要检查客户端是否正在轮换密钥,请在 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"