1. 报错现象
在 VSCode 中登录 Codex 时,浏览器可能已经完成 ChatGPT 登录,但 VSCode 仍然提示 token 交换失败。
Sign-in could not be completed
Token exchange failed: error sending request for url (https://auth.openai.com/oauth/token)
Error code:
token_exchange_failed
关键判断:这个错误指向 https://auth.openai.com/oauth/token,说明问题在登录认证链路,不是模型响应接口不可用。
2. 可能原因
auth.openai.com 访问超时、EOF、连接重置或代理节点被风控。这里最容易误判的一点是:浏览器能打开 ChatGPT,不代表 VSCode Codex 的 OAuth token 交换一定能完成。
3. 确认 Ubuntu 终端代理
本次本地代理端口是 127.0.0.1:7897。如果你的 Clash / Mihomo 端口不同,需要替换成实际值。
export http_proxy=http://127.0.0.1:7897
export https_proxy=http://127.0.0.1:7897
export all_proxy=socks5h://127.0.0.1:7897
测试认证域名:
curl -I --proxy http://127.0.0.1:7897 --max-time 20 https://auth.openai.com
如果这里出现 timeout、EOF、connection reset 等错误,应先换代理节点或调整代理规则。
4. 使用 Codex CLI 完成登录
如果 VSCode 插件登录流程不稳定,可以先用 Codex CLI 完成登录,让 CLI 写入本地登录缓存。
node -v
npm -v
npm i -g @openai/codex
codex login
如果终端显示登录链接但没有自动打开浏览器,就手动复制链接到浏览器里完成登录。完成后重启 VSCode:
pkill -f code
code
解决思路:先让 Codex CLI 跑通 OAuth 登录和本地凭据写入,再让 VSCode Codex 插件复用这份登录状态。
5. 排查结论
Token exchange failed是登录阶段问题,优先看认证域名和 OAuth token 交换。- VSCode 插件登录失败时,可以用
codex login先完成凭据缓存。 - 代理端口要统一,避免浏览器能访问但终端或 VSCode 不走代理。
- 完成 CLI 登录后重启 VSCode,通常可以让插件读取已有登录状态。