petstore-docs/架构决策-SessionToken严格过期边界-2026-08-02.md

1.6 KiB
Raw Blame History

架构决策Session Token 严格过期边界

日期2026-08-02
决策:exp 必填且必须在未来;非法 TTL 和非法过期载荷全部 fail-closed
本体:rule:BR-AUTH-001rule: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 只允许 3002592000 秒5 分钟30 天),兼顾短时误配防护和试点登录体验。
  4. 自动化测试使用真实 HMAC 构造签名正确的反例,证明拒绝原因来自过期契约,而不是签名失败。

兼容与边界

  • 正常由现有签发端产生的 token 均包含合法 exp,无需数据库或客户端迁移。
  • 修改 PETSTORE_SESSION_SECRET 仍会使旧 token 立即失效;生产轮换必须安排重新登录提示。
  • 当前会话仍是无服务端状态的 HMAC token员工删除、角色/门店变化由每次请求的活跃账号校验立即失效。独立 logout 吊销表仍不在本期试点范围。