401 未授权修复指南——Claude Code 与 Codex CLI
Claude Code 或 Codex CLI 接入 DeepSeek、OpenRouter 等服务商时遇到"401 未授权"的分步修复方法。
报错输出
Error: 401 Unauthorized
{"error":{"message":"Invalid Authentication: Bearer token is invalid or expired"}}
常见变体
anthropic: Request to Anthropic API failed with status 401: {"type":"error","error":{"type":"authentication_error","message":"invalid x-api-key"}}
Error: Invalid API key. Check your key at https://platform.deepseek.com/api_keys
具体文本随 Agent 版本与服务商略有差异,以状态码和消息类型为准。
快速定位
运行以下命令,检查 token 变量实际的值——问题几乎都出在这里。
Claude Code
echo $ANTHROPIC_AUTH_TOKEN Codex CLI
echo $DEEPSEEK_API_KEY $OPENROUTER_API_KEY 常见原因
- API Key 错误、已过期,或在配置完成后被重新生成。
- 密钥是在旧的终端会话中导出的,新值从未生效。
- 服务商账户余额不足,部分服务商将其报告为 401。
- 残留的 ANTHROPIC_API_KEY 把流量重路由回了 Anthropic(OpenRouter 场景)。
按场景修复
1 刚配置完就报错
- 编辑 Shell 配置文件后请打开新终端——旧会话中的变量是过期的。
- 密钥是否粘贴时带入了多余空格、引号或末尾换行?
- 密钥是否以预期前缀开头(DeepSeek 为 sk-,OpenRouter 为 sk-or-)?
- 是否还残留 ANTHROPIC_API_KEY 覆盖了路由?
2 更换 API Key 后报错
- 服务商生成新密钥的瞬间旧密钥即失效——旧值立刻不可用。
- 新密钥是否已替换到旧密钥出现的所有位置(Shell 配置、settings.json、CI)?
- 重试前重启终端或重新导出。
3 之前能用,突然报错
- 服务商是否轮换或退役了密钥?查看后台。
- 账户余额是否用尽?部分服务商以 401 而非 402 报告。
- Shell 配置或 settings.json 最近是否有变动(新工具、dotfiles 同步)?
Agent 差异修复
Claude Code
- 修复
- 将 ANTHROPIC_AUTH_TOKEN 设为服务商密钥;使用 OpenRouter 时保持 ANTHROPIC_API_KEY="" 显式置空。重新导出并打开新终端。
- 验证
- `claude /status` 应显示你的服务商端点与已连接状态。
Codex CLI
- 修复
- 导出 config.toml 中 env_key 指定的密钥(DEEPSEEK_API_KEY 或 OPENROUTER_API_KEY)。切勿把密钥写进 toml。
- 验证
- `codex exec "hi"` 成功,且服务商后台能看到该请求。
Claude Code 与 Codex CLI 对照速查
| Claude Code | Codex CLI | |
|---|---|---|
| 认证变量 | ANTHROPIC_AUTH_TOKEN | env_key in config.toml |
| 密钥存放位置 | Shell profile or settings.json env block | Exported env var referenced by env_key |
| 验证命令 | claude /status | codex exec "hi" |
避免复发
- 将密钥存入密码管理器并定期轮换。
- 切勿把密钥提交进 dotfiles 仓库或配置文件。
- 保留一份可用的配置快照,便于回滚错误的修改。
相关错误
相关接入指南
常见问题
我创建了新密钥为什么还是 401?
最常见的原因是终端会话过期:export 只对之后新开的会话生效。打开新终端,或重新导出后再运行验证命令。
订阅 Claude Pro / Max 能解决 401 吗?
不能。该配置使用服务商 API 密钥认证并按服务商计费。订阅无法与第三方端点组合使用,修复密钥前 401 会一直存在。
密钥正确为什么用 OpenRouter 还是 401?
当 ANTHROPIC_API_KEY 未设置或包含真实值时,Claude Code 会回退到 Anthropic 认证。将其显式置空,强制所有流量走 OpenRouter。