主题
PERSONAL_ACCESS_TOKENS 个人访问令牌表
Personal Access Token(PAT)是用户手动创建的长期访问凭证,用于脚本、CLI、CI/CD 等无法交互式登录的场景。用户拿到 PAT 后,将其作为 Bearer token 携带在请求中,或者URL参数 access_token传递,即可代替用户名密码完成鉴权。
位置
模型路径:/sysdata/data/tables/sec/PERSONAL_ACCESS_TOKENS.tbl
物理表名:SZSYS_5_PERSONAL_ACCESS_TOKENS
表结构
| 字段名 | 字段类型 | 字段描述 |
|---|---|---|
| ID | VARCHAR(128) | 主键,sha256(rawToken)。鉴权时对请求中携带的原始 token 做 SHA-256 后以此值查表 |
| USER_ID | VARCHAR(128) | 所属用户 ID |
| USER_DIRECTORY | VARCHAR(64) | 用户目录,sys 系统用户、external 外部用户 |
| NAME | VARCHAR(256) | 用户给 token 取的备注名,如 "My CI Script" |
| DESC | VARCHAR(1024) | 用途描述,如 "用于 Jenkins 自动部署流水线" |
| ENABLED | NUMBER(1) | 是否启用。1 有效,0 已吊销。吊销时清除关联 session |
| EXPIRE_TIME | TIMESTAMP | 过期时间,由用户指定(按天/月或永不过期) |
| CREATE_TIME | TIMESTAMP | 创建时间 |
表索引
| 类型 | 名称 | 字段列表 | 是否唯一 | 说明 |
|---|---|---|---|---|
| 主键 | PRIMARY | ID | 是 | sha256(rawToken) 哈希值作为主键,鉴权时直接主键 lookup |
快速理解
PAT 鉴权流程
用户携带 PAT 请求资源时,系统按以下流程鉴权:
| 步骤 | 阶段 | 动作 |
|---|---|---|
| 1 | 请求拦截 | 识别 Authorization: Bearer succ-xxx 前缀 |
| 2 | 凭证校验 | 对 rawToken 做 SHA-256,查 PERSONAL_ACCESS_TOKENS 确认 token 有效且未过期 |
| 3 | 会话分配 | 以 PAT 主键(sha256(rawToken))作为 session ID 创建 Session |
| 4 | 用户登录 | 校验用户状态,创建 HTTP Session |
| 5 | 后续请求 | 同一 rawToken 再次请求时,直接通过 session ID(即 PAT ID)查找已有会话 |
数据示例
以下展示 PAT 的典型落表形态。ID 由 sha256 计算,示例中用可读占位表示。
| ID | USER_ID | NAME | DESC | ENABLED | EXPIRE_TIME | CREATE_TIME |
|---|---|---|---|---|---|---|
a1b2c3... | admin | My CI Token | 用于 Jenkins 自动部署流水线 | 1 | 2026-09-17 10:00:00 | 2026-06-17 10:00:00 |
f7g8h9... | zhangsan | 数据导出脚本 | 每日凌晨导出报表数据 | 0 | 2027-01-01 00:00:00 | 2026-01-01 00:00:00 |
- 第 1 行:
admin创建的 PAT,有效期 3 个月。 - 第 2 行:
zhangsan的 PAT 已被吊销(ENABLED = 0),即使未到过期时间也无法使用。
使用注意
ID是sha256(rawToken)哈希,不可反推。rawToken 仅在创建时返回一次,之后无法找回。ENABLED = 0后鉴权立即失效,关联 session 被清除。- session ID 为 PAT 主键(sha256(rawToken)),PAT 表自身承载 session 标识。
- rawToken 以
succ-为前缀,鉴权时通过前缀区分 PAT 和普通 access_token,避免盲目 sha256 所有 token。
