跳转到内容
搜索文档

通过 API 创建令牌

最后更新 查看 MarkdownAgent 设置

通过 API 动态生成新的 API 令牌。在此之前,您必须在 Cloudflare 仪表板中创建一个可以创建后续令牌的 API 令牌。

生成初始令牌

在通过 API 创建令牌之前,您需要通过 Cloudflare 仪表板生成初始令牌

建议

Cloudflare 强烈建议在使用此模板时不要授予其他权限。请妥善保管新令牌,因为它可以创建有权访问用户任何资源的令牌。

Cloudflare 还建议通过客户端 IP 地址过滤或 TTL 限制令牌的使用,以降低令牌泄露后被滥用的风险。有关更多信息,请参阅限制令牌使用

使用 API 创建 API 令牌

您可以创建用户拥有的令牌或账户拥有的令牌以配合 API 使用。有关更多信息,请参阅用户拥有的令牌账户拥有的令牌 API 架构文档。

要创建令牌:

  1. 定义策略。
  2. 定义限制。
  3. 创建令牌。

1. 定义访问策略

访问策略定义令牌可以对哪些资源执行操作,以及令牌对这些资源拥有哪些权限。此过程类似于您在 Cloudflare 仪表板中创建令牌的方式。

每个令牌可以包含多个策略。

[
	{
		"id": "f267e341f3dd4697bd3b9f71dd96247f",
		"effect": "allow",
		"resources": {
			"com.cloudflare.api.account.zone.eb78d65290b24279ba6f44721b3ea3c4": "*",
			"com.cloudflare.api.account.zone.22b1de5f1c0e4b3ea97bb1e963b06a43": "*"
		},
		"permission_groups": [
			{
				"id": "c8fed203ed3043cba015a93ad1616f1f",
				"name": "Zone Read"
			},
			{
				"id": "82e64a83756745bbbb1c9c2701bf816b",
				"name": "DNS Read"
			}
		]
	}
]
字段 说明
id 创建后生成的唯一只读策略标识符。
effect 定义此策略是允许还是拒绝访问。如果只创建一个策略,使用 allow。策略的评估顺序如下:1. 显式 DENY 策略;2. 显式 ALLOW 策略;3. 隐式 DENY ALL
resources 定义允许配置哪些资源。
permission_groups 定义策略授予所含资源的权限。

资源

API 令牌策略支持三种资源类型:UserAccountZone

Account

在令牌策略中包含单个账户或所有账户。

  • 单个账户表示为:"com.cloudflare.api.account.<ACCOUNT_ID>": "*"
  • 所有账户表示为:"com.cloudflare.api.account.*": "*"
Zone

在令牌策略中包含单个 zone账户中的所有 zone所有账户中的所有 zone

  • 单个 zone 表示为:"com.cloudflare.api.account.zone.<ZONE_ID>": "*"
  • 账户中的所有 zone 表示为:"com.cloudflare.api.account.<ACCOUNT_ID>": {"com.cloudflare.api.account.zone.*": "*"}
  • 所有账户中的所有 zone 表示为:"com.cloudflare.api.account.zone.*": "*"
User

对于用户资源,您只能引用自己,表示为:"com.cloudflare.api.user.<USER_TAG>": "*"

权限组

通过指定权限组的 id 值将其添加到 API 令牌。我们建议使用 id 作为与 Cloudflare API 交互的键;权限 name 仅用于显示,可能会更改。权限组的作用范围限定于特定资源(user、account 或 zone),因此策略中的权限组仅适用于其对应作用范围的资源类型。

要获取所有可用权限组及其 ID,请使用 List permission groups 端点:

Required API token permissions

At least one of the following token permissions is required:
  • API Tokens Write
  • API Tokens Read
List Token Permission Groupsbash
curl "https://api.cloudflare.com/client/v4/user/tokens/permission_groups" \
	--request GET \
	--header "Authorization: Bearer $CLOUDFLARE_API_TOKEN"
{
  "result": [
    {
      "id": "19637fbb73d242c0a92845d8db0b95b1",
      "name": "AI Crawl Control Read",
      "description": "Grants access to reading AI Crawl Control",
      "scopes": [
        "com.cloudflare.api.account.zone"
      ]
    },
    {
      "id": "1ba6ab4cacdb454b913bbb93e1b8cb8c",
      "name": "AI Crawl Control Write",
      "description": "Grants access to reading and editing AI Crawl Control",
      "scopes": [
        "com.cloudflare.api.account.zone"
      ]
    },
    // (...)
	]
}

2. 定义限制

设置令牌使用方式的任何限制。API 令牌允许对客户端 IP 地址过滤和 TTL 进行限制。有关更多信息,请参阅限制令牌使用

定义 TTL 时,可以使用 not_before 设置令牌生效的时间,使用 expires_on 设置过期时间。这两个字段都采用以下格式的 UTC 时间戳:"2018-07-01T05:20:00Z"

使用以下对象按客户端 IP 地址过滤限制令牌的使用:

{
	"request.ip": {
		"in": ["199.27.128.0/21", "2400:cb00::/32"],
		"not_in": ["199.27.128.0/21", "2400:cb00::/32"]
	}
}

innot_in 对象中的每个参数必须使用 CIDR 表示法。例如,使用 192.168.0.1/32 指定单个 IP 地址。

3. 创建令牌

将上述信息组合起来创建令牌,如下例所示:

curl "https://api.cloudflare.com/client/v4/accounts/{account_id}/tokens" \
--header "Authorization: Bearer <API_TOKEN>" \
--header "Content-Type: application/json" \
--data '{
  "name": "readonly token",
  "policies": [
    {
      "effect": "allow",
      "resources": {
        "com.cloudflare.api.account.zone.eb78d65290b24279ba6f44721b3ea3c4": "*",
        "com.cloudflare.api.account.zone.22b1de5f1c0e4b3ea97bb1e963b06a43": "*"
      },
      "permission_groups": [
        {
          "id": "c8fed203ed3043cba015a93ad1616f1f",
          "name": "Zone Read"
        },
        {
          "id": "82e64a83756745bbbb1c9c2701bf816b",
          "name": "DNS Read"
        }
      ]
    }
  ],
  "not_before": "2020-04-01T05:20:00Z",
  "expires_on": "2020-04-10T00:00:00Z",
  "condition": {
    "request.ip": {
      "in": [
        "199.27.128.0/21",
        "2400:cb00::/32"
      ],
      "not_in": [
        "199.27.128.1/32"
      ]
    }
  }
}'
curl "https://api.cloudflare.com/client/v4/user/tokens" \
--header "Authorization: Bearer <API_TOKEN>" \
--header "Content-Type: application/json" \
--data '{
  "name": "readonly token",
  "policies": [
    {
      "effect": "allow",
      "resources": {
        "com.cloudflare.api.account.zone.eb78d65290b24279ba6f44721b3ea3c4": "*",
        "com.cloudflare.api.account.zone.22b1de5f1c0e4b3ea97bb1e963b06a43": "*"
      },
      "permission_groups": [
        {
          "id": "c8fed203ed3043cba015a93ad1616f1f",
          "name": "Zone Read"
        },
        {
          "id": "82e64a83756745bbbb1c9c2701bf816b",
          "name": "DNS Read"
        }
      ]
    }
  ],
  "not_before": "2020-04-01T05:20:00Z",
  "expires_on": "2020-04-10T00:00:00Z",
  "condition": {
    "request.ip": {
      "in": [
        "199.27.128.0/21",
        "2400:cb00::/32"
      ],
      "not_in": [
        "199.27.128.1/32"
      ]
    }
  }
}'
curl "https://api.cloudflare.com/client/v4/user/tokens" \
--header "Authorization: Bearer <API_TOKEN>" \
--header "Content-Type: application/json" \
--data '{
  "name": "readonly token",
  "policies": [
    {
      "effect": "allow",
      "resources": {
        "com.cloudflare.api.account.zone.eb78d65290b24279ba6f44721b3ea3c4": "*",
        "com.cloudflare.api.account.zone.22b1de5f1c0e4b3ea97bb1e963b06a43": "*"
      },
      "permission_groups": [
        {
          "id": "c8fed203ed3043cba015a93ad1616f1f",
          "name": "Zone Read"
        },
        {
          "id": "82e64a83756745bbbb1c9c2701bf816b",
          "name": "DNS Read"
        }
      ]
    }
  ],
  "not_before": "2020-04-01T05:20:00Z",
  "expires_on": "2020-04-10T00:00:00Z",
  "condition": {
    "request.ip": {
      "in": [
        "199.27.128.0/21",
        "2400:cb00::/32"
      ],
      "not_in": [
        "199.27.128.1/32"
      ]
    }
  }
}'

这篇文档对您有帮助吗?