返回 Bug 清单
BUG-0369project-29中已修复backend-logic

OAuth state 参数被丢弃 —— 多产品共用回调后永远跳默认站点

发现:2026-10-01验证:2026-10-09置信度:90%

症状

多产品统一登录后,从产品 B 发起登录却被送回产品 A——state 在授权请求里明明带上了,回调侧没人读。

根因

OAuth state 的标准职责是 CSRF 防护,本项目还承担『回跳意图』;发起侧写了 state,回调侧解析逻辑缺失——参数链路一端写一端丢,且两端分属不同提交,没有端到端测试兜住。

修复方案

1) 回调侧解析 state 中的 intent 并按它决定跳转目标,缺失时才用默认值; 2) state 结构化(base64 JSON:csrf + intent),签名或存服务端会话防篡改; 3) 每个产品发起端 × 回调端做参数回传的端到端用例,一条都不能少。

检测命令

grep -rn 'state' <发起端与回调端> 核对写入/读取是否成对;日志记录回调收到的 state 原文

错误签名

回调处理器忽略 state 携带的 intent → 无论从哪个产品发起登录都跳 /cognx

技术信息

来源项目

project-29

标签

oauth-state, csrf, intent-routing, parameter-pipeline, e2e