Codex 0.151 弃用 `api_key`:taotoken provider 改用 `requires_openai_auth`
接上一篇《Claude Code + Codex 多机配置对齐排错》:当时用
api_key修好了 401,升级到 Codex 0.151 后这个方案失效了。
TLDR
Codex CLI 升级到 0.151.0 后,~/.codex/config.toml 的 [model_providers.taotoken] 里写的 api_key = "sk-***" 被静默忽略,请求不带 Authorization 头,taotoken 网关返回 invalid_request_error: You didn't provide an API key。
修复:删掉 provider 里的 api_key,改为 requires_openai_auth = true,让 Codex 从 ~/.codex/auth.json 的 OPENAI_API_KEY 读密钥(taotoken CLI 本来就把 key 写在那里)。
问题
升级 codex 后(本机 Homebrew cask 更新到 0.151.0),codex 一调用就报:
{"error":{"message":"You didn't provide an API key. You need to provide your API key in an Authorization header using Bearer auth...","type":"invalid_request_error"}}
请求到达了网关,但没带密钥头 → 配置里的 key 没生效。
根因
Codex 0.151 的 model_providers 配置结构(ModelProviderInfo)没有 api_key 字段,认证只认:
| 字段 | 作用 |
|---|---|
env_key |
指向存密钥的环境变量名 |
experimental_bearer_token |
字面量 token(experimental) |
requires_openai_auth |
从 ~/.codex/auth.json 读密钥 |
aws |
AWS 认证 |
旧版 Codex(如 0.144)认 api_key,升级后该字段被忽略 → 请求不带密钥头。
修复
~/.codex/config.toml:
[model_providers.taotoken]
name = "TaoToken"
base_url = "https://taotoken.net/api/v1"
wire_api = "responses"
- api_key = "sk-***"
+ requires_openai_auth = true
key 不用写进 config.toml:Codex 会读 ~/.codex/auth.json 的 OPENAI_API_KEY(auth_mode = "apikey")。这正是 taotoken CLI(taotoken cx)写 key 的位置,命令行与桌面版/IDE 插件共用。
验证(真实运行):
codex exec 'reply with exactly: OK'
# provider: taotoken / model: deepseek-v4-flash → OK
桌面版 Codex 一并生效
桌面版 Codex(ChatGPT.app 内置,0.151.0-alpha.7.2)读同一个 ~/.codex/config.toml,schema 与 CLI 一致,所以同一处改动即可覆盖,重启 app 生效。
给 taotoken 工具的 patch
taotoken cx 写出的 provider 没有 requires_openai_auth,且旧用户 config 里可能残留手填的 api_key。建议 src/codex-config.js 的 applyCodexConfig 增加:
const nextProvider = {
...prevProvider,
name: 'TaoToken',
base_url: nextBaseUrl,
wire_api: 'responses',
+ requires_openai_auth: true,
};
delete nextProvider.env_key;
+ delete nextProvider.api_key; // 清理旧版遗留
@taotoken/taotoken没有公开源码仓库(npm 无repository字段,GitHub/Gitee 搜不到),patch 需走 taotoken.net 控制台反馈渠道提交。
命令速查
| 目的 | 命令 |
|---|---|
| 确认 codex 版本 | codex --version |
| 查看 provider 配置 | grep -A5 'model_providers.taotoken' ~/.codex/config.toml |
| 验证连通 | codex exec 'reply with exactly: OK' |
| 恢复旧配置 | ~/.taotoken/backups/codex/(taotoken 自动备份) |