API 令牌(API Tokens)

页面摘要: API tokens 可以在不暴露用户凭据的情况下,对访问 Strapi Content API 的外部请求进行身份验证。每个令牌的作用范围限定为一组权限,并在可配置的有效时长后过期。

API tokens 允许外部客户端对访问 Strapi Content API 的请求进行身份验证。若需以编程方式访问管理面板功能,请参阅 Admin Tokens。

API tokens 与 Admin tokens 严格分离:Content API 令牌在 admin 路由上会被拒绝,而 admin 令牌在 Content API 路由上也会被拒绝。

Security

对公开访问优先使用只读令牌,将令牌作用范围限制在所需的最小范围,定期轮换长期有效的令牌,并将其存储在密钥管理器中。

  • Plan:Free feature
  • Role & permission:Roles > Settings - API tokens 中至少需具备“Access the API tokens settings page(访问 API tokens 设置页面)”权限
  • Activation:默认可用
  • Environment:在开发与生产环境中均可用

API tokens

配置

API tokens 的大部分配置选项都可在管理面板中使用,你也可以利用 Strapi 项目的代码来改变 API tokens 的生成方式。

管理面板设置

配置该功能的路径: Settings > Global settings > API Tokens

API Tokens 界面会显示一个表格,列出所有已创建的 content-api 令牌。

从这里,你可以:

  • 点击 编辑令牌的名称、说明、类型、有效时长或重新生成令牌。
  • 点击 删除令牌。
NOTE

Strapi 会为你预生成 2 个 API 令牌,一个是 Full access(完全访问)令牌,一个是 Read-only(只读)令牌。由于在未配置加密的情况下令牌只能查看一次,你可能希望在设置加密密钥后重新生成它们,使其可永久查看。

创建新的 API token

  1. 点击 Create new API Token(创建新的 API Token) 按钮。

  2. 在 API token 编辑界面中,配置新的 API token:

    设置名称说明
    Name填写 API token 的名称。
    Description(可选)填写 API token 的说明。
    Token duration选择令牌有效时长:7 days(7 天)、30 days(30 天)、90 days(90 天),或 Unlimited(无限制)。
    Token type选择令牌类型:Read-only(只读)、Full access(完全访问),或 Custom(自定义)。
  3. (可选)对于 Custom(自定义) 令牌类型,通过点击内容类型名称并使用复选框启用或禁用权限,为你的 API 端点定义特定权限。

  4. 点击 Save(保存) 按钮。新的 API token 会显示在界面顶部,并带有一个复制按钮 。

自定义 API token

Viewable tokens

如果在你的 Strapi 项目中配置了加密密钥(admin.secrets.encryptionKey),新创建和重新生成的 API tokens 将在管理面板中随时可查看。

如果未设置加密密钥,令牌将仅能在创建或重新生成后立即查看一次。

重新生成 API token

  1. 点击该 API token 的编辑按钮。
  2. 点击 Regenerate(重新生成) 按钮。
  3. 在对话框中点击 Regenerate(重新生成) 按钮以确认。
  4. 复制显示在界面顶部的新 API token。

基于代码的配置

新的 API tokens 是使用一个 salt 生成的。该 salt 由 Strapi 自动生成,并以 API_TOKEN_SALT 的形式存储在环境变量(.env 文件)中。

该 salt 可以自定义:

WARNING

更改 salt 会使所有现有的 API tokens 失效。

确保 API tokens 在管理面板中可见

要让 API tokens 在管理面板中持久可见,必须在 你的 /config/admin 文件 的 secrets.encryptionKey 下提供加密密钥:

JavaScript

module.exports = ({ env }) => ({
  // other config parameters
  secrets: {
    encryptionKey: env('ENCRYPTION_KEY'),
  }
});

TypeScript

export default ({ env }) => ({
  // other config parameters
  secrets: {
    encryptionKey: env('ENCRYPTION_KEY'),
  }
});

该密钥用于加密和解密令牌值。没有该密钥,令牌仍可正常使用,但在首次显示后将无法再查看。新的 Strapi 项目会自动生成该密钥。

TIP

对于需要以编程方式调用管理面板功能的自动化工作流,请改用 admin tokens。完整文档请参阅 Admin Tokens。

使用

使用 API tokens 可以让你以已验证用户的身份,在 REST API 或 GraphQL API 端点上执行请求。

API tokens 有助于在不管理用户账户或不改动用户与权限(Users & Permissions)插件的情况下,向人员或应用程序授予访问权限。

在向 Strapi 的 REST API 发起请求时,应将 API token 以如下语法添加到请求的 Authorization 头中:bearer your-api-token。

NOTE

只读 API tokens 只能访问 find 和 findOne 函数。