目录
Claude Code 是否突然弹出过这样的消息,要求你登录?
Not logged in · Please run /login
Invalid API key · Fix external API key
Please run /login · API Error: 401 OAuth token has expired ...
API Error: 400 ... This organization has been disabled.
这些都属于“认证(你是谁)确认失败”类的错误,多数会以 401/403 的形式出现。麻烦之处在于,它们往往以一种令人费解的方式出现——“我明明在付费,却被拒之门外”“昨天还能用,今天突然要求登录”。不过大部分原因都很典型,只要弄清排查的顺序,就能在很短时间内修好。
先说最重要的几点。(1)认证问题中最常见的,是环境变量 ANTHROPIC_API_KEY 在“悄悄覆盖”你的订阅(Pro/Max)登录——这往往就是意外的按量计费、“organization disabled”、“Invalid API key”的真正元凶。(2)一切的起点都是先用 /status 查看“现在是用哪个凭据在运行”。(3)拿不准时,就“unset 掉多余的密钥 → /logout → /login”,干净地重新登入。
凭据是有“优先级”的
— 排在上面的胜出,所以环境变量里的 API 密钥会覆盖订阅
ANTHROPIC_AUTH_TOKEN(LLM 网关、代理用)
ANTHROPIC_API_KEY ← 环境变量
这个胜出=转为按量计费
apiKeyHelper
CLAUDE_CODE_OAUTH_TOKEN(claude setup-token)
ant CLI、Workload Identity Federation)ant auth login 等登录型配置文件,只有在 ANTHROPIC_PROFILE 中指定时才排在这里;不指定则排在 7 之下
/login)
这才是你真正想用的
只要 ANTHROPIC_API_KEY 还残留在环境中,它就会优先于订阅。
先用 /status 确认 → 不需要就 unset ANTHROPIC_API_KEY。
1. 这个错误到底在说什么
认证(authentication)就是“证明你是谁”。Claude Code 会用订阅的 OAuth 登录、API 密钥、云凭据等凭据中的一种来证明“你”的身份。当这个证明失败时,就会以 401(authentication_error)或 403(forbidden)的形式被拒绝。具有代表性的文案及其含义如下。
| 消息 | 含义 |
|---|---|
| Not logged in · Please run /login | 没有有效凭据 → /login |
| Invalid API key · Fix external API key | 来自环境变量或 apiKeyHelper 的密钥被 API 拒绝(如果 ANTHROPIC_API_KEY 里混入了换行等字符,Claude Code 会在发送前就拦下) |
| Your ANTHROPIC_API_KEY belongs to a disabled organization · … API Error: 400 ... This organization has been disabled. | 正在使用某个已停用组织的旧 ANTHROPIC_API_KEY。如果没有设置环境变量也出现,说明被停用的是 /login 那一侧的组织(见表格下方) |
| OAuth token revoked · Please run /login Please run /login · API Error: 401 OAuth token has expired ... | 在所有设备上登出/管理员移除了访问权限(revoked)、自动刷新失败(expired) |
| API Error: 403 ... forbidden ... Request not allowed | 订阅失效、缺少 Console 角色,或代理干扰 |
组织被停用的提示,在“·”之后有两种写法。Unset the environment variable to use your subscription instead 表示你还保留着用 /login 保存的登录,移除密钥后就会回到订阅。Update or unset the environment variable 表示这个密钥是你唯一的凭据:移除它并执行 /login,或换成有效组织的密钥。如果没有设置任何环境变量却仍持续出现,被停用的就是你通过 /login 登录的账号所属的组织。官方错误参考建议联系支持团队,或改用其他账号登录。
相似的 Login expired · Please run /login 与从一开始就没有凭据的 Not logged in 是不同的状态:已保存登录的自动续期被拒绝,Claude Code 随后删除了凭据。请求不会发出,而是停在本地,所以不要重试,而是用 /login 重新登录。详见Login expired · Please run /login 的含义与解决方法。
Not logged in 的文字也会因环境而不同。在 Claude Desktop 应用运行的会话(如 Code 标签页或 Cowork)中,显示为 Authentication required · Sign in again to continue,需要在应用里重新登录。根据官方错误参考,如果在使用同一配置目录的另一个 Claude Code 窗口中登录 claude.ai 账号,显示这条消息的交互会话会自动开始使用该登录,无需重启。不过旧版本中消息可能会残留。根据官方 CHANGELOG,v2.1.281(2026 年 9 月 23 日)修复了在另一个 Claude Code 进程中登录后,会话里仍残留“Not logged in · Run /login”页脚、claude.ai 连接器也缺失的问题;v2.1.286(9 月 30 日)修复了 macOS 上残留旧的 ~/.claude/.credentials.json 时,即使在另一个窗口中 /login 成功,会话仍显示 Not logged in 或 Login expired 的问题。官方建议 v2.1.286 之前的 macOS 重启显示该消息的会话。
如果组织的设置不允许用订阅登录,会出现以 Your organization has disabled Claude subscription access 开头的消息。这不是本地凭据的问题,所以用同一账号重新执行 /login 也解决不了。处理方法见第7节。
关键的习惯是:在责怪自己之前,先用 /status 查看“现在是用哪个凭据在运行”。大多数认证错误,都源自选中了意料之外的凭据——而其中头号嫌疑就是下一节的“API 密钥覆盖”。
2. 最大的陷阱——API 密钥会覆盖订阅
官方文档明确指出,Claude Code 会按“优先级”从多个凭据中选出一个(参见开头的图示)。问题在于,环境变量 ANTHROPIC_API_KEY 排在订阅(Pro/Max)登录之上。换句话说——
官方说明(要旨)
“即使有有效的订阅,只要环境中存在 ANTHROPIC_API_KEY,(在被批准后)也会优先使用它。如果该密钥属于一个已停用或已过期的组织,认证就会失败。请运行 unset ANTHROPIC_API_KEY 回退到订阅,并用 /status 确认当前生效的是哪一个。”
这种覆盖会引发三种“令人费解”的症状。(1)意外的按量计费——本应是订阅的固定费用,却经 API 密钥按 token 计费。(2)Your ANTHROPIC_API_KEY belongs to a disabled organization(或 This organization has been disabled)——残留的密钥属于一个已停用的旧组织。(3)Invalid API key——密钥已失效或有误。这些都不是“你登录本身的问题”,而是“多余的密钥赖在你的环境里不走的问题”。此外,在这种覆盖生效期间,你在 claude.ai 添加的连接器也不会被加载,还可能出现以 claude.ai connectors are disabled 开头的警告。详见claude.ai connectors are disabled 的含义与解决方法。
密钥从哪里来:~/.zshrc、~/.bashrc、~/.profile 里的 export ANTHROPIC_API_KEY=...;被 direnv、dotenv 或你的 IDE 终端读取的 .env;来自前一份工作或别的项目的残留;CI 环境。在 Windows 上则是 PowerShell 配置文件($PROFILE)或用户环境变量。用 /status 和 env | grep ANTHROPIC 检测;修复方法:
# 临时取消并启动
unset ANTHROPIC_API_KEY
claude
# 永久修复:从 shell 配置或 .env 中删除 export 行,然后用 /status 确认
注意:在交互模式下,会询问你一次是否使用该密钥,并记住你的选择(之后可通过 /config 中的“Use custom API key”开关更改;该开关只在设置了 ANTHROPIC_API_KEY 时才出现)。在非交互模式(-p)下,只要有密钥就会直接使用,不会询问。除非你有意要使用 API 密钥,否则请用 /status 确认订阅处于生效状态。
3. 其他原因
除覆盖之外的认证问题,原因通常也比较固定。
覆盖之外的认证绊脚石
/logout → /login 重新登入。~/.claude/.credentials.json,而会创建 API 密钥的 Console 登录会失败。用 claude doctor 检查。c 复制 URL,或设置 BROWSER。apiKeyHelper)后执行 /login。
“每次都要求登录”→ 先怀疑时钟偏差或钥匙串。
“被 403 拒绝”→ 先怀疑订阅失效、Console 角色或代理。
了解凭据存放在哪里,也能加快恢复速度。macOS:钥匙串(钥匙串拒绝写入时,改用与 Linux 相同的文件);Linux:~/.claude/.credentials.json(权限 0600);Windows:%USERPROFILE%\.claude\.credentials.json。这个文件由 /login 和 /logout 管理。出问题时,与其手动删除文件,不如按官方步骤操作:/logout → 关闭 Claude Code → 重新启动并执行 /login。登出会删除所有已保存的凭据,包括 MCP 服务器的登录和插件的敏感配置值,之后需要重新授权 MCP 服务器、重新填写这些值(官方登录与认证故障排查)。
4. 排查流程
认证卡住时,请自上而下依次排查。大多数情况在第 3 步就能解决。
自上而下逐项排查
/status 确认现在哪个凭据生效(订阅、API 密钥还是云)。env | grep ANTHROPIC(Windows 为 $PROFILE/用户环境变量)找出多余的密钥。unset ANTHROPIC_API_KEY → 重新启动。从 shell 配置或 .env 中删除 export 行使其永久生效。/logout → 关闭 Claude Code → /login 进行干净的重新认证。claude doctor 检查钥匙串/组织账号则确认Console 角色。
铁律:“先 /status,再搜寻多余的密钥”。
大多数情况,只要移除那个一直在覆盖你的密钥即可修好。
5. 与相似错误的区分
“被拒绝/被中断”也可能由非认证的原因引起。按 HTTP 状态码来区分是最可靠的办法。
| 症状 | 真正是什么 | 主要对策 |
|---|---|---|
| 401 / 403 · Invalid API key · Not logged in | 本文=认证(凭据问题) | /status → 移除多余的密钥 → /login |
| usage limit reached | 套餐额度用尽(认证正常) | 等待重置;对策 |
| 429 Request rejected | 速率限制(被低档密钥覆盖也可能导致 429) | 放慢请求;并用 /status 检查是否混入了密钥 |
| 529 / 500 | 服务端过载/内部错误 | 等待后重试;对策 |
| Credit balance is too low | Console 预付余额用尽,或本想用订阅,请求却走了 Console 的 API 密钥 | 充值额度。要用订阅,就在 /status 中确认密钥并 unset(尚未登录则执行 /login) |
记忆方法:401/403 是“你是谁”的问题=认证。usage limit 和 Credit balance 是“用量/余额”的问题。429 是速率,529/500 是服务端。尤其需要注意,多余的 API 密钥不仅会引发“认证失败”,还会带来“意外计费”“低档下的 429”和“Credit balance is too low”——这正是遇到困惑时永远先 /status 的原因。余额不足错误的解决方法详见Your credit balance is too low to access the Anthropic API 的含义与解决方法。其他常见错误,可参见错误汇总。
6. 防止再次发生的检查清单
一份让你不再反复卡在认证上的检查清单。
(1)如果你使用订阅,就不要在 shell 配置或 .env 中残留 ANTHROPIC_API_KEY(当心来自旧工作/旧项目的残留)。(2)养成在重要工作前用 /status 确认当前生效凭据的习惯。(3)在 CI 中,使用 claude setup-token 的 CLAUDE_CODE_OAUTH_TOKEN(或明确的 API 密钥)来代替交互式登录。(4)如果每次都要求登录,请检查系统时钟和 macOS 钥匙串。(5)对于组织账号,请确认 Console 角色和套餐状态。(6)在 WSL/SSH 中,记住粘贴代码的方法。
7. Your organization has disabled Claude subscription access——组织停用了订阅登录
用订阅账号登录 Claude Code 时,可能会被下面这条消息挡住:
Your organization has disabled Claude subscription access for Claude Code · Use an Anthropic API key instead, or ask your admin to enable access
它的意思是:你的账号所属的组织(Claude 的 organization)不允许通过订阅登录来使用 Claude Code。与第2节“残留的 API 密钥”、第3节“令牌被撤销/过期”不同,原因不在你的电脑上,而在组织的设置里。
官方说明(要旨)
“这是服务端的组织设置,因此无法通过本地设置、环境变量或 CLI 参数覆盖。用同一个账号重新执行 /login 会返回同样的错误。在非交互模式(-p)和 Agent SDK 中,它以错误代码 oauth_org_not_allowed 返回。”
官方给出的处理方法有三种,该选哪一种取决于你的身份。
作为组织成员使用时——请管理员开启访问
第一种是请管理员为你的组织开启 Claude Code 的访问。你这一侧没有可以更改的设置。提出请求时,把错误原文连同 /status 显示的账号和组织一起发过去,对方就能明白是哪个组织的设置。另外,官方的错误参考并没有写管理员要在哪个页面开启。
使用 API 密钥时——通过 Claude Console 认证
第二种是不用订阅,改用 Claude Console 的 API 密钥认证。消息里的“Use an Anthropic API key instead”指的就是这个。准备工作按官方的 Claude Console 认证步骤进行,无法由你一个人完成:
- Console 的管理员通过 Settings → Members → Invite 邀请你,并分配 “Claude Code”角色(只能创建 Claude Code 用的 API 密钥)或 “Developer”角色(可以创建任何类型的 API 密钥)
- 接受邀请后,在 Claude Code 中执行
/login,选择 Anthropic Console 账号登录。也可以把在 Console 中创建的密钥放进环境变量ANTHROPIC_API_KEY后再启动 Claude Code(交互模式下会询问你一次是否使用该密钥) - 用
/status确认当前生效的凭据已经切换为 Console
有两点需要注意。一是费用:通过 Console 的使用按 API 使用费计费,不占用订阅所含的用量(与第2节“意外的按量计费”是同一机制,只是这次是有意为之)。二是反方向的错误:如果 Console 那边的组织停用了 API 密钥认证,就会出现 Your organization has disabled API key authentication(v2.1.169 起的提示)。它的官方处理方法也正好相反——移除密钥,执行 /login 改用 claude.ai 账号登录。
如果你是组织的管理员
如果你是管理员却找不到开启访问的选项,官方建议联系Anthropic 支持团队。
出处:Claude Code 官方文档的错误参考(本错误与 Your organization has disabled API key authentication 两项)、认证文档中的Claude Console 认证一节,以及 Claude 帮助中心的文章 Use Claude Code with your Pro or Max plan(均于2026年9月22日确认)。
总结
Claude Code 的认证/登录错误(Not logged in/Invalid API key/organization disabled/OAuth token expired 等)大多是 401/403=凭据问题。而最频繁出现的真正原因,是“环境变量 ANTHROPIC_API_KEY 悄悄覆盖了订阅登录”——它会引发意外的按量计费、organization disabled 和 Invalid API key。因此,起点永远是用 /status 查看“现在是哪个凭据”。
排查顺序为 (1)/status → (2)用 env | grep ANTHROPIC 搜寻多余密钥 → (3)unset 并从 shell 配置中删除 → (4)/logout → /login → (5)时钟/钥匙串/Console 角色。大多数情况,只要移除那个一直在覆盖你的密钥即可修好。按 401/403=认证、usage limit/Credit=用量余额、429=速率、529/500=服务端来区分,就能避免对症不准的处理。相关:用量上限、529/500 错误、Claude Code 错误汇总。
FAQ
Q. 我明明在付费,却出现“Invalid API key”或“organization has been disabled”。为什么?
A. 多数情况下,是环境变量 ANTHROPIC_API_KEY 在覆盖你的订阅登录。如果该密钥属于一个已过期或已停用的组织,那么即使订阅有效,你也会被拒绝。用 env | grep ANTHROPIC 找到它,运行 unset ANTHROPIC_API_KEY,然后 /login 并用 /status 确认。同时也要从 shell 配置(如 .zshrc 等)或 .env 中删除 export 行。如果没有设置任何环境变量,organization disabled 却仍持续出现,被停用的是 /login 那一侧的组织:请联系支持团队,或改用其他账号登录。
Q. 我用的是订阅固定费用,却被按 token 计费了。
A. 这通常也是 ANTHROPIC_API_KEY 覆盖所致。当 API 密钥优先生效时,用量就会流向按 token 的 API 计费,而非你的订阅固定费用。请用 /status 确认“订阅处于生效状态”;若选中的是 API 密钥,就用 unset 加上清理配置将其移除。只有在你有意使用 API 密钥时才保留它。
Q. 每次启动都要求我登录。
A. 常见原因是(1)系统时钟偏差(令牌校验依赖准确的时间)和(2)macOS 钥匙串被锁定/密码不一致导致无法写入钥匙串(此时登录会改存到明文文件 ~/.claude/.credentials.json,而会创建 API 密钥的 Console 登录会失败)。请把时钟设置为自动同步,在 macOS 上用 claude doctor 检查钥匙串。若仍未解决,就用 /logout → /login 干净地重新登入。
Q. /status 能告诉我什么?
A. 它会显示当前是用哪种认证方式/凭据在运行(订阅 OAuth、ANTHROPIC_API_KEY,还是云凭据)。由于大多数认证问题都是“选中了意料之外的凭据”,所以先 /status 是铁律。显示的细节会随版本而变,请在官方文档中确认当前行为。
Q. 通过 WSL 或 SSH 时,浏览器打不开导致登录失败。
A. 在远程环境中,浏览器的重定向无法返回本地的回调地址。可通过以下方法绕开:粘贴 Claude Code 显示的登录代码,按 c 复制 URL 后在本地浏览器中打开,或在 WSL2 上设置 BROWSER 环境变量。记住粘贴代码的方法,处理起来就很稳妥。