返回 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