QQ 群 538642822 进入控制台
文档/技术分享/Codex 登录失败 token_exchange_failed 怎么办?localhost 回调与 403 排查

Codex 登录失败 token_exchange_failed 怎么办?localhost 回调与 403 排查

登录 Codex 时遇到下面三种情况,看起来都叫「登录失败」,但其实卡在认证链路的不同位置,处理办法也不一样:

  • 浏览器显示登录成功,Codex 却提示 token_exchange_failed。
  • 浏览器跳到 localhost 后打不开。
  • 直接出现 403 Forbidden。
适用范围

本文说的是 OpenAI 官方 Codex 客户端的登录流程(codex login 或客户端里的 Sign in with ChatGPT)。如果你用的是鹊桥这类自定义接口,是用令牌而不是 OAuth 登录,遇到 401/404 请看 大模型 API 常见报错怎么排查。

先搞懂登录流程#

Codex 浏览器登录的五个步骤,以及三类报错各自发生的位置
Codex 浏览器登录的五个步骤,以及三类报错各自发生的位置
  1. 运行 codex login,Codex 在本机临时启动一个回调服务。
  2. 打开官方授权页,你在浏览器里完成账号认证。
  3. 浏览器把授权结果送回 http://localhost:端口/auth/callback。
  4. Codex 拿授权码,向官方令牌地址发 POST 请求,换取令牌。
  5. 把凭据保存到本机。

这解释了两个常见误判:

  • 网页能打开 ChatGPT,不代表 Codex 进程能完成第 4 步。 浏览器和 Codex 可能走不同的代理、证书设置。
  • localhost 指的是「浏览器所在的这台机器」,不是 OpenAI 的服务器。Codex 跑在 WSL、SSH、容器或云开发环境里时,这点尤其关键。

按现象找原因#

现象说明卡在哪先检查什么
浏览器没打开,或授权页打不开浏览器启动、DNS 或网络手动打开终端里打印的授权地址
localhost 拒绝连接或一直转圈授权结果没回到本机回调服务终端窗口是否还开着;浏览器和 Codex 是否在同一台机器
token_exchange_failed已拿到授权码,换令牌这步失败代理环境变量、证书/HTTPS 检查、客户端版本
403 或 access_denied服务端拒绝账号、工作区权限、公司策略
persist_failed换到令牌了,但保存失败配置目录权限、CODEX_HOME
登录成功后发任务报 401 或断流已过了登录阶段codex login status、网络和服务状态
别急着下结论

token_exchange_failed 不等于账号被封。它只是外层提示,里面可能是连接失败、超时、证书校验失败、代理指向失效端口,或返回内容解析失败。先看详细错误,再判断。

第一步:记录现场,别先删配置#

先保存这些信息(不要截图或粘贴带 code=、state= 的回调地址,也别公开令牌和 auth.json):

Codex 版本:
入口:CLI / App / VS Code 扩展
系统:Windows / macOS / Linux / WSL / SSH / 容器
登录方式:浏览器 / 设备码 / API Key
错误码和完整错误正文:
发生时间:
同一账号在别的设备上是否正常:

然后在终端运行:

codex --version
codex login status

新版本还可以用 codex doctor 检查配置、认证存储、代理变量和网络可达性,是否可用看你的版本。

localhost 回调失败怎么办#

情况 A:浏览器和 Codex 在同一台电脑#

  1. 保持运行 codex login 的终端窗口不要关。
  2. 看终端里实际显示的回调端口,不要凭印象认定必须是某个端口。
  3. 浏览器没自动弹出,就把终端打印的完整授权地址复制到同一台电脑的浏览器里。
  4. 关掉以前遗留的登录页,重新跑一次 codex login,只完成最新那一次。
  5. 终端提示端口被占用时,先退出其他还在跑的 Codex 登录进程。

情况 B:Codex 在 WSL、SSH、容器或云端#

这时浏览器里的 localhost 指向你的本地电脑,而回调服务在远端,两者对不上。较新的 CLI 提供设备码方式:

codex login --device-auth

它会给出一个官方验证地址和一次性代码,适合没有本地浏览器的环境。只输入你自己刚刚发起的那个代码,别用别人发来的。如果你的版本不支持,就改在和浏览器同一台机器上完成登录。

token_exchange_failed 的排查顺序#

从影响面最小的开始:

  1. 更新 Codex,并彻底退出相关进程再重开。 桌面 App、终端和编辑器扩展都要退出,只刷新网页没用。
  2. 查代理环境变量是否指向失效端口。 浏览器可能走系统代理,而 Codex 进程读到的是以前遗留的变量。
    • Windows PowerShell:Get-ChildItem Env: | Where-Object Name -Match 'PROXY'
    • macOS / Linux:env | grep -iE '^(http|https|all|no)_proxy='

    变量里写着 127.0.0.1:某端口,就确认那个端口是否真有你认可的服务在监听。确认已过期,再去系统设置里改掉,并重启所有相关进程。

  3. 查 HTTPS 检查、自定义证书和安全软件。 错误详情里出现证书、TLS、握手失败、未知签发者时,重点看公司网络是否做 HTTPS 检查、安全软件是否替换了证书、系统时间是否正确。可以短时间隔离验证,但不要长期关闭安全软件,让管理员加受控例外才是正路。
  4. 对比不同机器。 同一账号在另一台电脑正常、只有这台失败,多半是本机的代理、证书、安全软件或版本问题,不是账号问题。
  5. 查脱敏日志。 较新的 CLI 会在日志目录写 codex-login.log,里面能看到是连接失败、超时还是服务端返回了某个状态码。提交问题前先把账号信息等敏感内容去掉。

403 要分开看#

  • 回调就是 access_denied:授权服务拒绝了。看是不是登错了账号,工作区或管理员是否开通了 Codex、是否强制了某种登录方式。
  • 令牌地址返回 403:只能确认请求被拒,不能直接推断是封号、没余额或地区问题。重新发起一次全新的登录,别复用旧的回调页;还是不行就保留版本、时间、错误正文和脱敏日志,去官方支持或官方仓库反馈。
  • 登录成功后接口才 403:已经不是 token_exchange_failed 了,要分清请求发给 ChatGPT Codex、OpenAI API 还是第三方服务,分别核对对应的权限。

什么时候才 logout、清理或重装#

建议顺序:codex login status → 保存诊断 → 更新并重启 → 查代理、证书、时间、安全软件 → 确认是旧凭据或账号切换问题后再:

codex logout
codex login

不要把「删整个 ~/.codex」当首选方案,它会同时丢掉配置和日志。重装也不是第一步,因为用户级代理变量和公司证书不会随卸载消失。

官方登录暂时不通,能直接换 API Key 吗#

可以,但这是另一套身份和账单:API Key 需要 OpenAI 平台项目和独立计费,ChatGPT 订阅不会自动变成 API 余额。命令行建议通过标准输入传入密钥,避免明文留在历史记录里:

printenv OPENAI_API_KEY | codex login --with-api-key

具体参数以 codex login --help 为准。不要把完整密钥发给客服、群友或网页表单。

常见问题#

localhost 打不开是官网宕机了吗?#

通常不是。localhost 是本机的回调地址,先确认 Codex 进程还在运行、浏览器和 Codex 在同一台机器上。

能在浏览器里打开令牌地址来测试吗?#

直接打开是 GET 请求,而真实的令牌交换用的是 POST。看到 405 只说明地址有响应,不能证明登录流程正常。

设备码登录一定能避开这个错误吗?#

不一定。它能避开本地回调问题,但最终仍要访问官方认证和令牌地址,代理或证书的问题照样会让它失败。

网页版 ChatGPT 正常,为什么 App 不行?#

浏览器和 App 的代理来源、证书存储、网络库可能都不同,App 版本本身也可能有问题。网页可用只能缩小范围。

参考资料#

相关阅读:Codex Windows 安装教程 · Codex 网页版、App、CLI 与 IDE 怎么选

鹊桥 AI 使用文档 · 管理员联系 2557237738 · QQ 群 538642822
官方域名:5202828.xyz / cdn.5202828.xyz / queqiaoai.top。请勿使用 api.queqiaoai.cc 等仿冒站点登录或充值。
鹊桥 AI 官方域名核验 · 5202828.xyz · 订阅