Skip to content

REFRESH_TOKENS OAuth2 授权码与刷新令牌表

以 TOKEN 为主键存储 OAuth2 授权码和刷新令牌。凭证消费和轮换通过 将旧行ENABLED设置为0然后插入新行实现, TOKEN 值永不更新,保持主键不可变,完整保留审计链路。

授权码和刷新令牌均属敏感凭证,不应导出或写入日志。

位置

模型路径:/sysdata/data/tables/sec/REFRESH_TOKENS.tbl

物理表名:SZSYS_5_REFRESH_TOKENS

表结构

字段名字段类型字段描述
TOKENVARCHAR(64)凭证值,主键。TOKEN_TYPE=1 时为授权码,/api/oauth2/authorize 生成;TOKEN_TYPE=2 时为刷新令牌,/api/oauth2/token 消费 code 后 INSERT 新行。刷新时旧行 ENABLED=0,INSERT 新行,TOKEN 永不更新
TOKEN_TYPENUMBER(1)凭证类型:1 授权码,2 刷新令牌
ACCESS_TOKENVARCHAR(64)关联的 access_token
USER_IDVARCHAR(32)授权用户 ID
USER_DIRECTORYVARCHAR(16)用户目录,sys 系统用户、external 外部用户
APP_IDVARCHAR(32)授信应用 ID
APP_NAMEVARCHAR(128)授信应用名称
ENABLEDNUMBER(1)是否启用。1 有效,0 已消费/失效
CODE_CHALLENGEVARCHAR(128)PKCE code challenge,仅授权码阶段写入,refresh_token 行传 NULL
CODE_CHALLENGE_METHODVARCHAR(8)PKCE 挑战方式,仅授权码阶段写入,refresh_token 行传 NULL
NEW_REFRESH_TOKENVARCHAR(64)刷新时写入的新 refresh_token。消费旧 token 时记录,并发请求可据此查找已生成的新 token,无需内存缓存
CREATE_TIMETIMESTAMP创建时间
EXPIRE_TIMETIMESTAMPTOKEN 过期时间。取值见 过期时间规范

凭证生命周期

  1. /api/oauth2/authorize → 在 REFRESH_TOKENS 中 INSERT 授权码行(TOKEN=code, TOKEN_TYPE=1, ENABLED=1)
  2. /api/oauth2/token → 校验 code 后消费旧行(ENABLED=0) → 在 REFRESH_TOKENS 中 INSERT refresh_token 行(TOKEN_TYPE=2) → 同时在 ACCESS_TOKENS 中 INSERT 一行 access_token
  3. /api/oauth2/refreshToken → 乐观锁消费旧 refresh_token 行(ENABLED=0) → INSERT 新 refresh_token 行(TOKEN_TYPE=2) → 更新 ACCESS_TOKENS 中对应 access_token 的值和过期时间

过期时间规范

凭证有效期按 TOKEN_TYPE 区分,创建时写入 EXPIRE_TIME,鉴权时校验 EXPIRE_TIME 判定过期。

凭证类型有效期说明
授权码(TOKEN_TYPE=1)10 分钟(600 秒)/api/oauth2/authorize 生成的 code 有效时间 10 分钟
刷新令牌(TOKEN_TYPE=2)6 个月(按 30 天/月估算)/api/oauth2/token 签发的 refresh_token,刷新轮换时新行同样按此有效期写入

表索引

类型名称字段列表是否唯一说明
主键PRIMARYTOKENTOKEN 为主键,不可变,配合 ENABLED 区分有效/消费状态
微信公众号微信公众号:山川软件