23 lines
1.6 KiB
Markdown
23 lines
1.6 KiB
Markdown
# 架构决策:Session Token 严格过期边界
|
||
|
||
> 日期:2026-08-02
|
||
> 决策:`exp` 必填且必须在未来;非法 TTL 和非法过期载荷全部 fail-closed
|
||
> 本体:`rule:BR-AUTH-001`、`rule:BR-CONFIG-002`
|
||
|
||
## 背景
|
||
|
||
Petstore 使用 HMAC-SHA256 session token。签发端始终写入 `exp`,但旧校验逻辑把缺失、无法解析或非正的 `exp` 转为 `0`,随后仅在 `exp > 0` 时检查过期。这意味着一枚签名正确但没有合法过期时间的载荷可能成为不过期会话。服务构造时还会把非正 TTL 静默回退为 7 天,使错误配置不易被发现。
|
||
|
||
## 决策
|
||
|
||
1. `verify` 要求 `exp` 可解析为 Unix 秒且严格大于当前时间;缺失、非数字、非正、过去时间以及等于当前秒全部拒绝。
|
||
2. `SessionTokenService` 收到非正 TTL 时直接拒绝构造,不做默认回退;未显式配置仍由配置层使用 604800 秒默认值。
|
||
3. production profile 与 `release-preflight.sh` 只允许 300~2592000 秒(5 分钟~30 天),兼顾短时误配防护和试点登录体验。
|
||
4. 自动化测试使用真实 HMAC 构造签名正确的反例,证明拒绝原因来自过期契约,而不是签名失败。
|
||
|
||
## 兼容与边界
|
||
|
||
- 正常由现有签发端产生的 token 均包含合法 `exp`,无需数据库或客户端迁移。
|
||
- 修改 `PETSTORE_SESSION_SECRET` 仍会使旧 token 立即失效;生产轮换必须安排重新登录提示。
|
||
- 当前会话仍是无服务端状态的 HMAC token;员工删除、角色/门店变化由每次请求的活跃账号校验立即失效。独立 logout 吊销表仍不在本期试点范围。
|