主题
ACCESS_TOKENS 认证令牌表
此表用于存储系统中有多种来源的访问凭证,如:OAuth2 授信应用签发的 token、系统内部生成的临时 token 等。除了Personal Access Token (PAT) 在 PERSONAL_ACCESS_TOKENS 中存储以外, 系统内部所有的访问凭证都存储在该表中。
位置
模型路径:/sysdata/data/tables/sec/ACCESS_TOKENS.tbl
物理表名:SZSYS_5_ACCESS_TOKENS
表结构
| 字段名 | 字段类型 | 字段描述 |
|---|---|---|
| ACCESS_TOKEN | VARCHAR(64) | 主键,凭证值。所有 token 均由系统随机生成(UUID) |
| SOURCE_TYPE | VARCHAR(32) | 凭证来源类型,见 SOURCE_TYPE 取值 |
| USER_ID | VARCHAR(32) | 凭证对应的用户 ID |
| USER_DIRECTORY | VARCHAR(16) | 用户目录,sys 系统用户、external 外部用户,不填默认为 sys |
| SSOID | VARCHAR(128) | 签发此凭证的 SSO 提供者 ID(如 wechat_oa),单点登录有此字段,用于追溯登录来源 |
| ENABLED | NUMBER(1) | 是否启用。1 有效,0 已禁用或已吊销。与过期时间是两个独立维度:token 未过期但 ENABLED != 1 也无法使用 |
| APP_ID | VARCHAR(32) | 授信应用 ID,仅 OAuth2 和客户端凭证 token 有此值,关联 SZSYS_5_TRUSTED_APPS |
| APP_NAME | VARCHAR(128) | 授信应用名称,冗余存储方便查询 |
| SESSION_ID | VARCHAR(64) | 凭证创建 Session 后回写的会话 ID。未创建 Session 前为空,创建后写入,后续请求通过此字段判断是否已有可用会话 ,用于 Session 会话复用 |
| EXPIRE_TIME | TIMESTAMP | 凭证过期时间 |
| CREATE_TIME | TIMESTAMP | 凭证创建时间 |
表索引
| 类型 | 名称 | 字段列表 | 是否唯一 | 说明 |
|---|---|---|---|---|
| 主键 | PRIMARY | ACCESS_TOKEN | 是 | 唯一标识一条凭证记录 |
快速理解
| 凭证类型 | 用途 | 典型场景 |
|---|---|---|
| OAuth2 access token | 第三方应用调用开放 API | 第三方应用后端 API 调用 |
| 客户端凭证 token | 可信服务器代入用户身份调用接口 | 系统间集成 |
| 证书凭证 token | 使用证书认证的可信服务器代入用户身份调用接口 | 高安全要求的系统间集成 |
| 系统内部 token | 系统自动生成的临时凭证(API、调试、截图、扫码预览等) | 内部服务 |
上述凭证共用同一个鉴权入口(Bearer 头或 URL 参数 access_token),系统根据 SOURCE_TYPE 采用不同的校验规则。
SOURCE_TYPE 取值
| SOURCE_TYPE | 凭证类型 | 创建 Session | 使用后删除 |
|---|---|---|---|
authorization_code | OAuth2 access token | 是 | 否 |
client_credentials | 客户端凭证 token | 是 | 否 |
personal_temp | 页面跳转登录 token(signin / getAccessToken) | 是 | 是 |
sys_script | 脚本生成凭证 | 是 | 否 |
sys_nodejs | NodeRunner 调试 token | 是 | 否 |
sys_screenshot | 截图服务 token | 是 | 否 |
sys_mobile_preview | 移动端预览 token | 是 | 否 |
各类型凭证说明
OAuth2 access token:SOURCE_TYPE = authorization_code
第三方应用通过 OAuth2 授权流程获取的接口凭证。授权码和刷新令牌存储在 REFRESH_TOKENS,本表只存 access_token。
用户授权后,系统在 REFRESH_TOKENS 中消费授权码,在本表写入 access_token 行。access_token 可用于调用开放 API,也可用于创建 Session。刷新 token 时本表的 ACCESS_TOKEN 和过期时间会更新。允许多次使用。
客户端凭证 token:SOURCE_TYPE = client_credentials
服务端到服务端集成的凭证,第三方系统以自身应用身份代入指定用户调用接口,整个过程无需浏览器跳转或用户交互。系统签发前会依次校验:授信应用是否启用、APP_SECRET 是否匹配、请求来源 IP 是否在白名单内、被代入用户是否属于授信应用配置的用户组范围。该 token 记录的是"应用身份 + 用户身份"的组合——APP_ID / APP_NAME 标识授信应用来源,USER_ID / USER_DIRECTORY 标识实际代入的用户;首次鉴权创建 Session 后会回写 SESSION_ID,后续请求复用同一会话。
系统内部 token
系统内部自动生成的临时凭证,便于排查和审计。
| SOURCE_TYPE | 生成来源 | 是否一次性 | 说明 |
|---|---|---|---|
personal_temp | signin 非 AJAX / getAccessToken | 是 | 拼在 URL 上做页面跳转登录,用后立即删除,防止任何人拿到 URL 重复登录 |
sys_nodejs | 后端使用命令行调用nodejs编译元数据 | 否 | VSCode 调试注入,调试会话期间可重复使用 |
sys_screenshot | 生成缩略图 | 否 | 服务端截图,批量导出时同一 token 可能需要多次渲染 |
sys_mobile_preview | 手机扫码仪版、报表等生成的二维码页预览对应的页面 | 否 | 扫码预览、二维码访问,同一个二维码需支持多人扫描 |
sys_script | security.createAccessToken | 否 | 服务端脚本为指定用户生成凭证,允许多次使用,需脚本自行管理生命周期 |
过期时间规范
| SOURCE_TYPE | 有效期 | 说明 |
|---|---|---|
authorization_code | 8 小时(28800 秒) | OAuth2 access_token,参考 GitHub OAuth2 规范,用于 expires_in 属性 |
client_credentials | 8 小时(28800 秒) | 客户端凭证 token,同 OAuth2 规范 |
sys_script | 8 小时(28800 秒) | 服务端脚本生成凭证,与 OAuth2 token 一致 |
personal_temp、sys_nodejs、sys_screenshot、sys_mobile_preview | 10 分钟 | 页面跳转/编译/截图/扫码预览等一次性或短生命周期场景 |
数据示例
| ACCESS_TOKEN | SOURCE_TYPE | USER_ID | USER_DIRECTORY | APP_ID | EXPIRE_TIME | CREATE_TIME | ENABLED |
|---|---|---|---|---|---|---|---|
e7f3a9c2-4b1d-4e8a-9c3f-2d7b8a1e6f54 | authorization_code | u001 | sys | app001 | 2026-06-10 12:00:00 | 2026-06-10 10:00:00 | 1 |
f2b8c4d6-1e3a-4f9b-8d2c-5a7e0b3f1d98 | personal_temp | u002 | sys | 2026-06-10 10:10:00 | 2026-06-10 10:00:00 | 1 | |
a3d5e7f9-2b4c-4d6e-8f1a-3b5c7d9e2f46 | sys_mobile_preview | u003 | sys | 2026-06-10 10:10:00 | 2026-06-10 10:00:00 | 1 | |
d8c7b6a5-4e3f-2d1c-9b8a-7f6e5d4c3b2a | client_credentials | u004 | sys | app002 | 2026-06-10 12:00:00 | 2026-06-10 10:00:00 | 1 |
相关表
- REFRESH_TOKENS:存储 OAuth2 授权码和刷新令牌。授权码消费后写入本表 access_token,刷新令牌用于轮换 access_token。
- PERSONAL_ACCESS_TOKENS:存储 PAT 的资产信息(名称、描述、启停状态)。
使用注意
ACCESS_TOKEN可直接代表访问身份,不应导出、展示或写入日志。personal_temp是唯一一次性 token:拼在 URL 上做页面跳转登录,用后立即原子删除,防止 replay 攻击。其他类型(authorization_code、client_credentials、sys_script、sys_nodejs、sys_screenshot、sys_mobile_preview)不删,过期前可多次使用。SESSION_ID通过记录此字段来保证相同的access_token在不同的请求中可以复用会话。- 令牌属于敏感凭证,不应导出、展示或写入日志。
