Claude Code 报 401 认证失败怎么解决?六条认证类报错的分流表

2026-08-08

认证类报错是 Claude Code 里最容易「治错病」的一族。它们长得都差不多,都在说「你没通过」,但成因分散在完全不同的地方:环境变量、订阅登录、组织策略、系统钥匙串、云厂商凭证。

照着搜到的第一条办法试,试对了是运气。这篇按官方错误参考把这一族拆开,先给分流方法,再给每条的处理。

一、先跑 /status,这是分流的起点

认证问题的第一动作不是改配置,是先搞清楚当前这个会话到底在用哪套凭证

官方在几乎每一条认证类报错的处理里都提到了 /status——它会显示活跃的凭证来源。这一步的价值在于:Claude Code 的凭证有好几个来源,它们之间有优先级,而你以为在用的那个,未必是它实际在用的那个。

最常见的错位是:你已经用订阅登录过了,但环境里还留着一个 ANTHROPIC_API_KEY,于是它走的是 API key 那条路——而那个 key 可能早就失效或被撤销了。

所以顺序是:

  1. /status 看当前用的是什么
  2. 对照下面的表找到你的报错
  3. 按那一条处理

二、六条报错的分流表

报错原文说的是什么官方给的处理
API Error: 401 Invalid authentication credentialsAPI 拒绝了凭证/status 看活跃凭证;显示 API key 就去控制台轮换,或 unset ANTHROPIC_API_KEY;只显示登录就 /login;用网关的去修网关侧凭证
Invalid API keykey 本身被拒查拼写、查是否被撤销;env | grep ANTHROPIC 确认;unset ANTHROPIC_API_KEY/login;key 来自 apiKeyHelper 就直接跑那个脚本看输出
Not logged in · Please run /login压根没有可用凭证/login;或确认 ANTHROPIC_API_KEY 在启动 claude 的那个 shell 里确实导出了;CI 用 apiKeyHelper
Login expired · Please run /loginOAuth 刷新令牌被拒/login;非交互模式先跑 claude 完成登录再重跑命令;自动化用 ANTHROPIC_API_KEY,或 claude setup-token 生成长期令牌
OAuth token revoked or expired保存的登录失效了/login;仍报就先 /logout/login;反复提示要查系统时钟和 macOS 钥匙串
Could not resolve authentication method到 API 客户端时一个凭证都没有升级到 v2.1.176 或更高;确认凭证在启动工作进程的环境里;/status 确认来源

三、几条最容易踩的细节

3.1 env | grep ANTHROPIC 要在同一个 shell 里跑

官方在 Invalid API key 的处理里特意写了这条命令:

env | grep ANTHROPIC

Windows PowerShell:

Get-ChildItem Env:ANTHROPIC*

关键是「同一个 shell」。你在 A 终端里 export 了,在 B 终端里启动 claude,那个变量根本不存在。同理,你在 .zshrc 里写了但没重开终端,当前会话也读不到。

这条能解释大量「我明明设了 key」的情况——设了,但不在启动 claude 的那个环境里。

3.2 环境变量会盖掉你的订阅登录

如果你既有订阅、又在环境里留了 ANTHROPIC_API_KEY,那么在多条报错的处理里,官方给的动作都是同一个:

unset ANTHROPIC_API_KEY

然后 /login

这个动作在 API Error: 401Invalid API keyThis organization has been disabled 三条里都出现了。如果你是订阅用户却撞上认证问题,先看环境里有没有这个变量,是性价比最高的一次检查。

3.3 反复要你登录:查时钟

OAuth token revoked or expired 的处理里有一条很容易被忽略:如果反复提示登录,检查系统时钟和 macOS 钥匙串。

系统时钟不准会导致令牌的有效期校验出问题——这类问题的表现就是「刚登录完又说过期」。虚拟机、长期休眠的笔记本、手动改过时间的机器都可能撞上。

钥匙串那条在 issue #3243(已关闭)里有印证:那条 issue 的报错是

API Error: 401 {"type":"error","error":{"type":"authentication_error","message":"Invalid OAuth token. The provided token was not found or is malformed."}}

而 issue 正文里附的错误详情显示,实际失败的是一条读取 macOS 钥匙串的命令(security find-generic-password)。也就是说,报出来的是 401,真因是本地凭证读不出来。

这是认证族里很典型的一种错位:报错发生在 API 侧,根因在本地。

3.4 自动化场景的两条路

Login expiredNot logged in 的处理里,官方对自动化给了明确的两条路:

  • ANTHROPIC_API_KEY
  • 或者 claude setup-token 生成一个长期令牌

还有一条是 apiKeyHelper——配置一个脚本,让 Claude Code 在启动时调它拿 key。这条适合 key 需要动态获取(比如从密钥管理服务取)的场景。

apiKeyHelper 自己也会出问题,官方单列了一条 Your apiKeyHelper script is failing,成因是那个命令报错退出、超时、或者没往标准输出打东西。处理办法很直接:

  1. 直接在 shell 里跑那条命令,看能不能复现
  2. 如果它说会话过期了,去凭证提供方那边重新认证
  3. 修到它把 key 打到标准输出、并以退出码 0 结束
  4. /status 可以看到 apiKeyHelper 的错误输出

第 3 条是重点:它要的是 stdout + 退出码 0,两个条件缺一不可。脚本里多打一行日志到 stdout,也会把 key 污染掉。

四、组织策略类:不是你的问题

有几条报错说的是组织管理员的设置,你自己怎么改都没用,认出来能省很多时间:

报错含义处理
This organization has been disabled你用的 key 属于一个已停用的控制台组织unset ANTHROPIC_API_KEY → 重启 claude/status 确认
Your organization has disabled API key authentication管理员关掉了 API key 认证提到 ANTHROPIC_API_KEY 就 unset;提到 apiKeyHelper 就从 settings.json 里移除;然后 /login
Your organization has disabled Claude subscription access组织不允许用订阅登录让管理员开权限,或改用 API key 认证

注意前两条和第三条方向相反:前两条是「别用 key,去登录」,第三条是「别登录,去用 key」。看清楚报错说的是哪一种,再动手。

还有一条 does not meet scope requirement user:profile,成因是保存的令牌缺了新功能需要的权限范围。处理很简单:直接 /login 拿一个带当前范围的新令牌,不需要先登出。

五、云厂商凭证:另一套体系

如果你走的是 Amazon Bedrock 这条路,认证报错是另一族,官方要求 v2.1.198 或更高版本

  • AWS credentials expired or invalid:跑报错消息里点名的那条 awsAuthRefresh 命令(例如 aws sso login --profile myprofile);或者 /login 选「Claude Platform on AWS · refresh credentials」;用 aws sts get-caller-identity 确认凭证在 Claude Code 之外是有效的
  • AWS authentication failed:先跑 awsAuthRefresh 排除过期;凭证是新的就去查 IAM 权限和模型访问权限
  • AWS default-chain credential resolve timed out:默认凭证链 60 秒没出凭证。用 aws sts get-caller-identity 诊断;启动前先完成登录步骤;确实需要更久就调高 CLAUDE_CODE_AWS_CHAIN_RESOLVE_TIMEOUT_MS

这三条的共同点是:先在 Claude Code 之外验证凭证。 aws sts get-caller-identity 是这条链路的分界线——它通了,问题在 Claude Code 侧;它不通,先去修 AWS 那边。

六、还有两条容易被归错类的

有两条报错看起来像认证问题,实际上跟凭证本身无关,值得单独认出来:

Remote Control requires the Anthropic API

成因不是你的凭证有问题,而是这个会话没有直接跟 Anthropic API 通信。官方处理:

  • unset ANTHROPIC_BASE_URL 然后重启会话
  • 或者从一个直连 Anthropic API 的会话里启动远程控制

也就是说,你如果配了 LLM 网关(ANTHROPIC_BASE_URL),远程控制这个功能就用不了。这不是权限问题,是链路要求。

claude.ai rejected the session token

成因是 claude.ai 的连接器请求失败——claude.ai 那边拒绝了 Claude Code 的登录令牌。官方处理:

  • /login 重新登录
  • /mcp 重新连接连接器,或者 /mcp reconnect <server>

第二条是关键:这条报错跟 MCP 连接器有关,光重新登录可能不够,还要把连接器重连一次。

把这两条认出来的价值在于:它们不会因为你换凭证、清环境变量而好转。花时间在那上面是白费的。

七、一条排查路径

把上面压成一条能照着走的路:

  1. /status —— 看它实际在用什么凭证
  2. env | grep ANTHROPIC(在启动 claude 的那个 shell 里)—— 看有没有意外的 key 在盖你的登录
  3. 有就 unset ANTHROPIC_API_KEY 然后 /login
  4. 还报 → 先 /logout/login
  5. 反复要登录 → 查系统时钟,macOS 再查钥匙串
  6. 报错提到组织 → 认清是「别用 key」还是「别登录」,方向别搞反
  7. 走 Bedrock → 先 aws sts get-caller-identity 划清界限

前三步能解决掉大多数情况。核心就一句:先搞清楚它在用哪套凭证,再决定改什么。

本文所引官方内容来自 Claude Code 官方错误参考文档,issue 编号来自 anthropics/claude-code 仓库,核对日 2026-08-08。版本要求与产品行为会变化,具体以官方文档为准。

相关阅读

想系统学会用 AI?报名体系课或加入会员,照着学、照着用。