跳转至

个人访问令牌(PAT)

个人访问令牌(Personal Access Token,PAT)供 SDK 与自动化脚本使用,以令牌所属用户的身份访问 Inklet API,无需交互式登录。PAT 不支持独立 Scope——其权限与用户当前权限完全同步。

Base URL

本页所有接口的 Base URLhttps://dev.iminklet.com

概述

PAT 的使用方式与普通访问令牌完全相同,在 HTTP 请求头中以 Bearer 方式提供:

Authorization: Bearer il_pat_...

与普通访问令牌的区别:

  • PAT 不参与 X-Renewed-Token 滑动续签机制。
  • PAT 不能调用 PAT 管理接口(创建、列表、撤销);管理接口必须使用常规用户 Access Token。
  • PAT 的权限随用户当前权限实时同步,不引入 Scope、Project、Workspace 或 Service Account 隔离。

安全建议

安全注意事项

  • 不要将 PAT 提交到 Git 仓库、写入日志或 Trace、拼接到 URL 或 query string 中。
  • 使用 Secret Manager 或环境变量存储 PAT。
  • 设置合理的过期时间,定期轮换;一旦泄露立即撤销。

PAT 模型

{
  "id": "01912345-6789-7abc-def0-123456789abc",
  "name": "home automation",
  "prefix": "il_pat_abcdef",
  "lastFour": "wxyz",
  "createdAt": "2026-01-15T10:30:00Z",
  "lastUsedAt": "2026-07-01T08:00:00Z",
  "expiresAt": "2027-01-01T00:00:00Z",
  "revokedAt": null
}
字段 类型 描述
id UUID PAT 的数据库主键
name string 用户为该令牌设置的名称(最多 100 个字符)
prefix string 令牌前缀(il_pat_ 加后续 6 位),用于辨识
lastFour string 令牌末四位,用于辨识
createdAt timestamp 创建时间
lastUsedAt timestamp 或 null 最后使用时间(最多每 5 分钟更新一次,最终一致)
expiresAt timestamp 或 null 过期时间;null 表示永不过期
revokedAt timestamp 或 null 撤销时间;null 表示未撤销

安全存储

服务端仅存储令牌的 SHA-256 摘要,明文令牌只在创建响应中返回一次。遗失后只能撤销并重建。

接口列表


POST /api/personal-access-tokens

需要常规用户 Access Token

创建新的个人访问令牌。

请求头:

Authorization: Bearer {accessToken}

请求体:

{
  "name": "home automation",
  "expiresAt": "2027-01-01T00:00:00Z"
}
字段 类型 必填 描述
name string 令牌名称,1–100 个字符
expiresAt string(RFC 3339) 过期时间,必须在当前时间之后;省略则永不过期

响应: 201 Created

{
  "id": "01912345-6789-7abc-def0-123456789abc",
  "name": "home automation",
  "prefix": "il_pat_abcdef",
  "lastFour": "wxyz",
  "createdAt": "2026-01-15T10:30:00Z",
  "lastUsedAt": null,
  "expiresAt": "2027-01-01T00:00:00Z",
  "revokedAt": null,
  "token": "il_pat_abcdefghijklmnopqrstuvwxyz0123456789ab"
}

令牌只显示一次

响应中的 token 字段是完整的明文令牌,仅在此次创建响应中返回。请立即安全保存。后续列表接口不再返回明文令牌;一旦遗失,只能撤销后重建。

错误:

状态码 原因
400 name 为空或超过 100 个字符,或 expiresAt 不在未来时间
401 访问令牌缺失或无效
403 调用方本身是 PAT(PAT 不能管理 PAT)

GET /api/personal-access-tokens

需要常规用户 Access Token

列出当前用户的所有个人访问令牌。

请求头:

Authorization: Bearer {accessToken}

响应: 200 OK

[
  {
    "id": "01912345-6789-7abc-def0-123456789abc",
    "name": "home automation",
    "prefix": "il_pat_abcdef",
    "lastFour": "wxyz",
    "createdAt": "2026-01-15T10:30:00Z",
    "lastUsedAt": "2026-07-01T08:00:00Z",
    "expiresAt": "2027-01-01T00:00:00Z",
    "revokedAt": null
  },
  {
    "id": "01912345-6789-7abc-def0-000000000002",
    "name": "ci pipeline",
    "prefix": "il_pat_ghijkl",
    "lastFour": "1234",
    "createdAt": "2026-03-10T09:00:00Z",
    "lastUsedAt": null,
    "expiresAt": null,
    "revokedAt": "2026-06-01T12:00:00Z"
  }
]

列表响应不包含 token 字段——仅展示名称、前缀、末四位、创建、最后使用、过期与撤销状态。

错误:

状态码 原因
401 访问令牌缺失或无效
403 调用方本身是 PAT(PAT 不能管理 PAT)

DELETE /api/personal-access-tokens/{id}

需要常规用户 Access Token

按 ID 撤销指定个人访问令牌。撤销立即生效,后续使用该令牌的请求将返回 401。接口对同一令牌的重复撤销请求是幂等的。

路径参数:

参数 描述
id 要撤销的 PAT UUID

请求头:

Authorization: Bearer {accessToken}

响应: 204 No Content

撤销成功,响应无正文。

错误:

状态码 原因
400 id 不是有效 UUID
401 访问令牌缺失或无效
403 调用方本身是 PAT(PAT 不能管理 PAT)

错误行为

以下情况均返回 401 Unauthorized,不暴露具体原因:

  • PAT 已过期
  • PAT 已被撤销
  • 令牌格式无效或哈希不匹配
  • 所属用户已被删除或停用

PAT 不参与 X-Renewed-Token 响应头,该机制仅适用于 JWT 访问令牌。

使用示例

创建 PAT(使用常规 Access Token)

curl -X POST https://dev.iminklet.com/api/personal-access-tokens \
  -H "Authorization: Bearer $ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"name":"home automation","expiresAt":"2027-01-01T00:00:00Z"}'

使用 PAT 查询设备列表

curl https://dev.iminklet.com/api/devices \
  -H "Authorization: Bearer $INKLET_PAT"

撤销 PAT

curl -X DELETE "https://dev.iminklet.com/api/personal-access-tokens/$PAT_ID" \
  -H "Authorization: Bearer $ACCESS_TOKEN"