Back to News
Troubleshooting
OpenClaw 的 Codex OAuth 可能看起来已就绪,实际却永远不走 Codex:‘No API key found’ 背后的缺失 `auth order` 问题

OpenClaw 的 Codex OAuth 可能看起来已就绪,实际却永远不走 Codex:‘No API key found’ 背后的缺失 `auth order` 问题

OpenClaw News 编辑部

OpenClaw News 编辑部

一条新的 OpenClaw issue,指向了一个很容易把运维带偏的故障模式:Codex OAuth 登录看起来成功了,但运行时其实一直没有真正走到 Codex。

最常见的表面报错会像这样:

FailoverError: No API key found for provider "openai-codex"

这条报错听上去像“凭证没配好”。但按 issue 描述,真实情况并不是这么简单。

问题在于,OAuth 登录流程虽然把有效的 Codex profile 写进了 auth-profiles.json,却可能没有把这个 provider 的 per-agent auth order 一起补齐。结果就是,请求虽然看起来“已完成认证”,但运行时依然找不到可路由的 Codex 凭证,于是直接掉进 fallback chain。

来源:

真正坏掉的地方在哪里

按这条报告给出的链路,复现过程大致是:

  1. 运行 openclaw models auth login --provider openai-codex
  2. 在浏览器里顺利完成 OAuth
  3. 看到 auth-profiles.json 里已经写入新的 profile
  4. 看到 openclaw models list 里 Codex 也显示已认证
  5. 发送一次真实模型请求
  6. 运行时仍然报 No API key found for provider "openai-codex"

关键点在于:登录流程似乎只把 profile 存好了,但没有把 agent 侧真正用于路由选择的 order 写好。

所以这不是下面这些更直白的问题:

  • OAuth 浏览器登录本身失败
  • 凭证文件根本没写进去
  • 用户完全没有做认证

它更隐蔽,也更麻烦:表面 setup 看着完整,实际路由状态却还没补完。

为什么这会误导运维

这条问题值得写,不是因为它报错新奇,而是因为它打破了一个很多运维默认会相信的前提:

只要 models auth login 成功,models list 也显示 Auth: yes,这个模型就该能正式接流量。

在这次报告里,这个前提并不成立。

CLI 展示的是“看起来健康”的状态,但运行时仍然无法为 openai-codex 选中真正可用的 credential,因为 order["openai-codex"] 还是空的。于是最终 fallback decision 会把它当成“没有可用凭证”,继续往下游 Provider 走。

如果你原本就配了 fallback chain,比如:

  • openai-codex/gpt-5.4
  • deepseek/deepseek-chat
  • 其他付费或带内容限制的 Provider

那问题就更隐蔽了。它不会在 setup 阶段明确中断,而是可能悄悄把流量引到你本来不想用的下一跳。

这会带来什么实际影响

按 issue 描述,这个问题会导致所有 Codex 请求都错过原本想走的订阅 OAuth 通道,即便用户已经按文档完成了登录。

实际影响包括:

  • 你的 ChatGPT 订阅路径可能根本没被用到
  • 流量会漏到本来不想额外付费的 fallback provider
  • fallback provider 自己的报错会进一步掩盖真正根因
  • 排障时间被拉长,因为 UI 和 CLI 都像是在说“认证已经配好了”

如果你的默认主模型本来就是 Codex,这就不是一个“提示不准”的小问题,而是一个会直接改变每次请求路由结果的故障。

怎么确认你撞到的是这一个问题

如果下面多数条件都成立,你大概率撞的是同一个坑:

  1. 你用的是 openclaw models auth login --provider openai-codex
  2. 浏览器里的 OAuth 流程确实成功完成了
  3. openclaw models list 里 Codex 显示已经认证
  4. 真实请求仍然报 No API key found for provider "openai-codex"
  5. 运行时继续掉到 fallback chain 的下一个 provider
  6. openclaw models auth order get --agent <agent> --provider openai-codex 显示没有 order override

最后这一条最关键,因为它能把这次问题和一些更常见的情况区分开,比如:

  • OAuth 会话过期
  • agent 指错了
  • fallback 配置本身写坏
  • 其他 provider 的独立故障

当前 workaround 真正修了什么

issue 里给出的临时修法,是手动补一次 auth order,例如:

openclaw models auth order set --agent main --provider openai-codex <profile-id>

按报告,这么做之后,同一套环境会立刻恢复正常路由,因为 provider order 和 last known good 都被补齐了。

这对运维来说有个很关键的含义:

  • profile 本身其实存在
  • 运行时本来也能用它
  • 只是缺了让它“可路由”的 order 状态

所以这里的临时解法不是“再登录几次碰碰运气”,而是:明确检查并补齐 provider order。

现在最稳的处理方式

如果你的环境里 Codex 是关键链路,短期更稳的办法应该是偏运维动作,而不是只盯着报错字面意思。

1)OAuth 登录后,不要只看 models list

还要补查:

openclaw models auth order get --agent main --provider openai-codex

如果这里是空的,就别把这次 setup 当成已经完成,即便前面的界面看起来都正常。

2)登录完之后,必须打一枪真实请求

完成 OAuth 后,至少用目标 agent 发一条真实模型请求。

因为这类 bug 就卡在“凭证已保存”和“运行时真能选中它”之间,只有真实请求才能把问题暴露出来。

3)诊断阶段要警惕 fallback 掩盖根因

如果你的下一个 fallback provider 返回了别的错误,很容易把排障方向带歪。

在查 Codex OAuth 时,先确认运行时到底有没有真的打到 Codex,再决定要不要继续追别的 provider 报错。

4)把这一步写进团队 runbook

在上游行为修好之前,使用 Codex OAuth 的团队,最好把下面这套检查写进内部 onboarding 或排障 SOP:

  • 完成 OAuth 登录
  • 验证 order override 是否存在
  • 发送一条真实请求

这不优雅,但比“看到 Auth: yes 就默认没问题”安全得多。

看到 No API key found 时,先按三条链路分流

这类入口最容易把读者带进“重新登录 OAuth”循环。更高效的值班分流是先看三条链路:

  1. 凭据链路:OAuth profile 是否真的存在,token 是否仍有效。如果这里失败,问题是登录或刷新。
  2. 顺序链路:per-agent order 是否写入 Codex,并且排在当前 fallback 之前。如果这里为空,登录成功也不会被 runtime 选中。
  3. 运行链路:实际请求是否进入 Codex adapter,还是已经落到下一个 provider。这里决定你该查 Codex OAuth,还是查 fallback provider 的 key。

这三条链路能避免把所有 No API key found 都误判成“缺密钥”。对搜索读者来说,关键不是再登录一次,而是确认凭据、路由顺序和实际 runtime 命中的 provider 是否一致。

为什么它和之前那篇 Codex OAuth 旧文不是一回事

之前 OpenClaw 社区已经有过一类 Codex OAuth 排障:旧的 models.providers.openai-codex 手工覆盖配置,把新版内置 OAuth 行为遮蔽掉。

那是另一类故障。

这次的新问题说的是:即便你已经在用内置登录流程,登录步骤本身也可能没把 agent 路由状态补完整。换句话说:

  • 之前那类文章关注的是 旧手工配置覆盖了新行为
  • 这次关注的是 新登录流程本身没有把凭证完整挂进 agent 路由

如果你已经清理过旧 override,仍然还在看到 No API key found,那这条新 issue 就很值得优先检查。

搜索入口分流:Codex OAuth 登录后为什么还是 fallback

如果你是从 “Codex OAuth fallback”、“OpenAI Codex per-agent order” 或 “OpenClaw Codex 登录后仍走默认模型” 搜到这里,先按这四层判断:

  1. 确认 OAuth 是否只完成了账号登录:登录成功不等于 per-agent runtime 已经写入或被读取。
  2. 确认配置落点:检查期望的 per-agent order 是否写到当前运行时实际读取的配置文件,而不是旧 workspace 或默认 profile。
  3. 确认 agent 选择链路:如果 runtime 选择发生在登录之前或缓存里,后续 OAuth 成功也可能不会立刻改变已启动 agent。
  4. 确认 fallback 是否是安全兜底:有些 fallback 是认证缺失,有些是模型别名、provider mapping 或环境变量不完整导致。

排查关键是把“登录成功”拆成“凭证可用、配置已写入、运行时已读取、agent 已重新选择”四个状态,不要只盯 OAuth 页面。

区分 OAuth 成功和 runtime 可用

从“OpenAI Codex OAuth 登录成功但 runtime 仍 fallback”搜进来的运维读者,第一步要先分清:OAuth 成功只证明浏览器账号流程完成了,不代表每个 agent 的 runtime 已经能按 provider order 使用它。改凭证或删 session 前,先按下面四层拆:

  1. 账号登录状态:确认 OAuth callback 已完成,并且 Codex runtime 能看到预期账号。
  2. Provider order 状态:检查 agent 级 provider order 是否仍把 Codex 放在第一位,还是被默认 model/runtime override 覆盖。
  3. Runtime 启动态:先跑一个极小诊断任务,记录实际选中的 runtime、model 和第一条 provider error,再重试生产任务。
  4. Fallback 边界:如果 OAuth 健康但 runtime 选了别的 provider,优先按配置漂移或 provider order 漂移处理,不要当成认证故障。

这样能避免高意图访问者反复重新登录,而真正要修的是 provider order、runtime 选择和 agent 级模型配置的一致性。

从 Codex OAuth 流量转成认证边界排查

如果你是从 “Codex OAuth login”、“per-agent order runtime” 或“登录后仍回退 runtime”这类搜索进来,先不要把它归因成模型不可用。更高效的排查顺序是先分清三件事:OAuth token 是否真的写入、per-agent order 是否读到了新凭据、runtime fallback 是登录失败还是配置优先级覆盖。

最小证据包包括:登录完成时间、当前 agent order 配置、实际启动的 runtime 名称、以及 fallback 发生前后的 gateway 日志。只有当 token 已存在但 per-agent order 仍不生效时,才应该把问题升级为 OpenAI Codex OAuth 映射或 runtime 选择 bug;否则先修本地认证状态或配置层。

Codex OAuth 登录成功后,先确认 agent 级 provider 顺序

OAuth 页面显示登录成功,不等于运行时一定会优先使用 Codex。排查时先把“账号授权”和“agent 实际 provider 顺序”拆开看:

  1. 用当前 agent 的状态或配置确认 provider order,避免只检查全局默认模型;
  2. 看失败日志里实际命中的 provider,如果仍然落到未登录或无 key 的运行时,说明排序/映射没有生效;
  3. 不要反复重新 OAuth,先确认这个 agent 会不会读取到新的凭据与 provider 覆盖。

这类问题的搜索意图通常不是“怎么登录 Codex”,而是“明明登录了为什么 OpenClaw 还 fallback”。把验证点放在 agent 级 provider order,可以更快区分认证失效、配置未生效和运行时 fallback bug。

相关阅读

结论

如果 OpenClaw 里的 Codex OAuth 看起来已经配置好,但每次真实请求仍然因为 No API key found 回退出去,先别急着认定是凭证根本没存好。

按当前这条报告,更危险也更贴近现实的解释是:profile 其实已经存在,但 per-agent auth order 还是空的,导致 Codex 在运行时根本不可路由。

现阶段更稳的做法很简单:显式检查 order 状态,然后用一条真实请求验证,再把“Codex OAuth 已完成”这件事写进变更记录。

值班时的快速决策树

如果你在值班时发现 Codex OAuth 登录后仍落回默认 runtime,不要先把它当成单纯的登录失败。更稳的分流顺序是:

  1. OAuth 已成功,但 per-agent order runtime 没生效
    • 优先怀疑运行时选择链路或配置落盘链路,而不是先去重置账号。
    • 先对比登录前后 agent order 配置是否真的发生了持久化变化。
  2. OAuth 本身就失败或中断
    • 这时问题面更早,不该直接套这篇的 runtime 回落结论,应先查登录链路本身。
  3. 只有新建 agent 受影响,旧 agent 正常
    • 更像创建时写入或默认值覆盖问题,应优先抓创建路径和默认 runtime 证据。

宣布问题收口前,还要补验什么

即便你已经让目标 runtime 生效,也别只看一次界面状态就结束。至少还要补验这四件事:

  1. 新建和已有 agent 都能稳定落到预期 runtime,而不是只修好单一样本;
  2. 登录后刷新或重启相关界面/进程,runtime 选择不会再次回落到默认值;
  3. 一条真实任务已经在目标 runtime 上完整执行,确认不是“显示对了、执行还错了”;
  4. 事故记录里已经保存 OAuth 前后配置差异、受影响 agent 样本和回退条件。

如果你现在要继续定位,下一跳先看哪两篇

如果你当前的目标不是研究 OAuth 细节,而是尽快判断问题究竟落在登录、runtime 选择、agent 配置还是消息链路,建议按这个顺序继续看:

  1. 先看 OpenClaw Agents 排障指南:任务卡住、工具不回、结果异常时先查什么,把 OAuth 表象和实际运行时、权限、工具调用失败区分开;
  2. 再看 OpenClaw 完整安装指南:自托管搭建、检查点与常见坑,补验 gateway、首次运行、版本与基础依赖是否真的处于可用状态。

如果你已经确认环境本身没问题,再回到这页对照“登录成功但 runtime 仍回退”的判断链,排查会快很多。

你也可能是这样搜到这类问题

如果你正在搜下面这些问法,这页说的通常就是同一类故障:

  • openclaw codex oauth 登录成功还是回到默认 runtime
  • openclaw models list 显示 auth yes 但 codex 还是 no api key found

如果你是先从首页或总览页进来的,也可以先回到 OpenClaw News 中文首页 看当前最值得优先排查的安装、Agent 和故障入口,再决定是先修 OAuth 路由,还是先排除基础环境问题。

如果你下一步要继续排查,先点哪一篇

如果你已经确认这不是单纯的登录失败,下一跳最值得先看的通常不是别的 provider 文档,而是两篇更接近真实值班动作的排障页:

  1. 先看 OpenClaw Agents 排障指南:任务卡住、工具不回、结果异常时先查什么,把 OAuth 表象和 Agent 运行时、权限、工具调用失败拆开;
  2. 如果你怀疑其实是环境、版本或基础链路没稳,再看 OpenClaw 完整安装指南:自托管搭建、检查点与常见坑,避免把基础环境缺口误判成 Codex OAuth 专属问题。

如果你的症状还同时包含 CLI 在 hooks 后卡 20 到 40 秒,再串着看 OpenClaw CLI 在 v4.5+ 后可能卡 20 到 40 秒:为什么 Gateway 明明健康,命令行却像死了一样,这样能更快区分是 OAuth 路由没落好,还是 CLI / RPC 链路本身也在一起退化。

修改 auth order 前的预检查清单

在你改 provider 设置或重新跑 OAuth 之前,先把能证明这是 order-runtime 问题的路由证据抓下来:

  1. OAuth 状态:确认 Codex profile 已存在,并且在改动前就显示 authenticated。
  2. per-agent order 状态:记录受影响 agent 是 order 为空、首位 provider 错误,还是 Codex 完全缺失。
  3. runtime trace:跑一条小任务,确认真实请求到底进入了哪个 provider adapter。
  4. fallback 症状:保存完整 No API key found provider 名称,用来区分 Codex 路由失败和 fallback provider 真的缺 key。
  5. 持久化检查:刷新或重启相关 OpenClaw 进程后,再确认 order 没回落,才把 workaround 视为稳定。

这样能避免高意图 OAuth 搜索流量反复重登账号;真正要验证的是 authenticated profile 到 agent runtime selection 之间有没有断链。

如果你是从 troubleshooting 进来,先分清 OAuth 状态和 agent runtime 选择

GA4 现在把这篇和 setup、其他 agent 排障入口放在同一组里。读者可能已经在浏览器里看到 Codex 登录成功,但下一个 agent 仍然回退到错误 runtime 或 provider 顺序。

不要先反复重新登录,先拆成三类检查:

  1. 当前用户的 OAuth 根本没完成:确认 callback 到达本机 OpenClaw 进程,并且浏览器步骤后 credential store 确实发生变化。
  2. OAuth 完成但 agent order 没选 Codex:检查 per-agent runtime/provider 排序,因为有效 token 仍可能被 fallback 优先级绕开。
  3. Codex 启动了但实际由另一个 runtime 回复:保留 session id、选中的 runtime、model alias 和首条 transcript,让问题保持为路由 bug,而不是误判成认证 bug。

这样能避免从 setup 心智进来的读者反复做 OAuth,把时间浪费在登录流程上,而真正需要修的是 runtime 选择或 provider 排序。

手动补 order 后,恢复前再跑 4 个验证

当你已经用 openclaw models auth order set 补上 Codex profile,不要只看命令返回成功就把事故关掉。恢复前先补这四项:

  1. 同一 agent 复测:用刚才受影响的 agent 跑一条真实请求,确认请求确实进入 openai-codex,不是被另一个 fallback provider 接走。
  2. 新建 agent 复测:如果团队会频繁创建 agent,额外建一个最小 agent 复测,确认默认写入路径没有继续漏掉 order。
  3. 重启后复查:重启 Gateway 或相关 OpenClaw 进程后再执行 auth order get,确认手动修复已经持久化。
  4. 成本与路由记录:在交接里写清楚修复前后的 provider、profile id 和 fallback 链,避免后续把流量变化误判成模型质量问题。

这能把“Codex 又能回了”升级成可交接的恢复结论,也能服务那些搜索 Codex OAuth auth yes but runtime fallback 的读者。

如果 direct 或首页流量打开这篇 OAuth 页

最新 GA4 把这篇 Codex OAuth 问题和中文首页、setup 附近页面、Agents 总排障页放在同一组里。这个入口不应该只当成 bug 记录看,它更像一个高意图操作入口:读者大概率已经有可运行的 OpenClaw,但某个 agent 仍然落到了错误 runtime。

改 secret 或重登账号前,先按来源分流:

  1. 从 setup 过来:先验证基础安装和 callback 路径,因为本地 callback 断了时也会伪装成 auth order 问题。
  2. 从排障总表过来:先保存 runtime、provider order 和 fallback provider,再改配置,保证事故能复现。
  3. 从群聊或 direct 链接过来:先记下受影响 agent id、profile id 和第一条失败 transcript,再执行 workaround。

这样这篇文章就不只是单点 bug 说明,而是 OAuth、runtime selection 和 fallback-provider 证据之间的操作入口。

升级给维护者前,先贴这份 runtime 证据包

如果补 order、重启、真实请求复测后仍然回落,不要只说“Codex OAuth 还是不行”。维护者最需要的是能定位 runtime selection 的证据包:

  1. 环境版本:OpenClaw 版本、运行方式(本机、Docker、systemd、VPS)和触发问题的 agent 名称。
  2. 认证状态:models list 或等价输出里 Codex profile 的 authenticated 状态,以及 profile id 是否变化。
  3. order 前后差异:贴出修复前后的 per-agent auth order,不要只贴最终成功状态。
  4. 真实请求落点:保存一条最小请求的 session id、model alias、provider adapter 和第一行错误。
  5. 重启后结果:说明 Gateway 或 OpenClaw 进程重启后 order 是保留、清空,还是被旧配置覆盖。

这份证据能把问题从“登录体验不好”提升为“authenticated profile 到 agent runtime selection 的持久化链路断了”,也能减少维护者来回追问。

修完后,把这 5 个回归用例写进 Codex OAuth SOP

如果这次是通过手动补 order 或重登 OAuth 才恢复,不要只在事故单里写“已修复”。把下面 5 个回归用例放进团队 SOP,下一次升级或新建 agent 时直接复测:

  1. 新用户 OAuth:一个从未登录过 Codex 的用户完成授权后,新 agent 是否自动拿到正确 provider order。
  2. 老用户刷新 token:已有 profile 刷新或重新授权后,原 agent order 是否仍指向 Codex。
  3. 新建 agent 默认路由:创建最小 agent 后跑一条真实请求,确认不会落到 fallback provider。
  4. 重启持久化:Gateway 或 OpenClaw 进程重启后,再查 order 和真实请求落点。
  5. fallback 保护:故意禁用 Codex profile 时,错误信息要指向 Codex auth/order,而不是误报另一个 provider 缺 key。

这组回归用例能把一次手动 workaround 变成后续版本、团队 onboarding 和自托管升级里的稳定检查点。

从 Codex OAuth 搜索进来时,先区分登录、runtime 顺序和 fallback 现象

这类故障会吸引三种相近搜索意图,但修法不同。不要一上来就轮换凭据或重写所有 agent 配置,先按下面分流:

  • agent 启动前 OAuth 登录就失败:先验证浏览器/会话登录链路和 token 存储,runtime 顺序还不是第一嫌疑。
  • OAuth 登录成功,但某个 agent 仍选错 provider:检查该 agent 的 provider 顺序,以及是否有旧的 openai-codex override 抢在目标 runtime 前面。
  • 只有某个模型或 provider 报错后才 fallback:把首个 provider 报错和 fallback 决策放在同一份 transcript 里,再修失败 provider,不要只用另一个默认值掩盖。

对排障人员来说,最快证据包是一次成功登录检查、一份失败 agent 的 runtime 顺序输出、以及一行实际选中 provider 的 transcript。这样 Codex OAuth 搜索流量会被送到最短排障路径。

相关阅读

搜索进来后的 3 分钟分流:OAuth、order 还是 fallback

如果你是从排障总表或搜索结果来到这里,先用 3 分钟确认自己到底卡在哪一层:

  1. 浏览器 OAuth 没完成:不要改 order,先看 callback、端口、credential store 是否真的写入。
  2. OAuth 已完成但 order 为空或顺序不对:留在本文,优先补 per-agent auth order,并记录补前补后的差异。
  3. order 正确但仍报另一个 provider 的 key 错误:先确认真实 runtime 有没有进入 Codex;如果已经 fallback,问题可能已经转到下一层 provider。
  4. 改完后只成功一次:不要立刻关单,重启后再复查 order 和一条真实请求,确认不是缓存或临时状态。

这能把 auth yes、No API key found 和 fallback provider 报错拆开,避免高意图访客反复重登 OAuth,却没有修到 agent runtime selection。

© 2025 OpenClawNews.org
保留所有权利。
这是一个独立的资讯网站。与 OpenClaw 官方没有任何关联、认可或连接。OpenClaw 是其各自所有者的商标。
加入等候名单:

OC NEWS