返回 Bug 清单
BUG-0388project-14中已修复frontend-logic
OAuth PKCE verifier 只存内存 —— 跨 tab/恢复流程丢 state,补 localStorage 双写 + 15min TTL
发现:2026-10-01验证:2026-10-31置信度:90%
症状
用户在新标签页完成 OAuth 回调 → token 交换缺 verifier 失败;移动端浏览器后台回收内存后同样中断,表现为『登录转圈后莫名失败』。
根因
OAuth 回调可能落在与发起方不同的执行上下文(新 tab、会话恢复),内存态跨不过上下文边界;而 verifier 是回调阶段的必需品,生命周期应与『授权流程进行中』对齐而非与页面实例对齐。
修复方案
1) verifier 双写:内存 + localStorage(键含 state 关联),回调侧按 state 取回;
2) 写入时打 15 分钟 TTL,交换成功或过期即清——用完即焚防泄漏;
3) 与纯内存 Map 方案互补:内存方案防泄漏,双写方案保跨 tab,二选一都有缺口。
检测命令
双 tab 手测 OAuth 流程;检查 verifier 存储位置的写入/清除配对错误签名
PKCE code_verifier/challenge 仅存内存变量;新 tab 打开回调链接或浏览器恢复会话时 verifier 已丢失技术信息
来源项目
project-14
标签
oauth, pkce, cross-tab, ttl, session-continuity