跳到正文

Claude Code 登录失败怎么办:排查 OAuth 500、403 与 Invalid code

先看错误出现在浏览器授权、终端接收授权码,还是登录后的第一次请求。按这一步分流,才能判断该重新登录、检查账户权限,还是等待服务恢复。

••15 分钟阅读•Claude Code
Claude Code 登录排障示意:区分授权码、403 权限与 500 服务错误,并核对认证、网络和恢复结果

Claude Code 报 OAuth error: Invalid code 时,应重新发起登录并使用新授权码;登录后报 403 Forbidden,应核对实际使用的认证方式、账户权限和网络;遇到 500,先确认失败的是授权页面还是模型请求。不要只凭错误数字就删除配置、重装客户端,或认定账户被封。

本文处理 Claude Code 自身的登录问题。若错误来自 /mcp 中某个第三方服务的授权,排查对象应是该 MCP 服务,而不是 Claude 订阅登录。以下操作依据截至 2026 年 9 月 6 日的官方文档;具体错误需要结合你当前的终端、账户和服务状态判断。

封面中的终端界面、授权链接与授权码均为示意。实际在 shell 中发起登录的命令是 claude auth login,请按下文步骤操作。

先找出登录卡在哪一步

保留出错终端,记录完整错误文本和出现时间。浏览器与终端可能在不同机器上:本机浏览器打开了网页,并不代表 SSH 服务器或 WSL 内的 Claude Code 已收到登录结果。

你看到的现象先检查什么下一步
浏览器授权后,终端显示 Invalid code授权码是否来自本次登录、是否完整重新发起登录,及时回填新码
浏览器显示授权完成,终端仍等待浏览器能否把结果送回运行 CLI 的机器使用原终端提供的授权码输入方式
登录后第一次请求报 403 Forbidden当前认证方式、订阅或组织角色、公司代理按下面的 403 分支逐项核对
授权页面或 OAuth 授权请求报 500登录服务状态、该次授权请求的错误查看对应时间的故障记录,再重新发起登录
已进入会话,发送消息报 API Error: 500实际模型服务方,是否配置自定义地址检查该服务方状态,稍等后重试请求
Claude Code 登录排障分支总览:定位失败阶段,分别处理 Invalid code、403 和 500,再验证恢复结果

图中界面是排障示意,不是实测记录。各类报错是按现象选择的分支,并非必然依次发生;其中 printenv ANTHROPIC_API_KEY 会直接显示密钥值,检查变量时请使用下文只显示“已设置”的命令,不要直接照抄图中的示例。

如果能进入 Claude Code 会话,先输入 /status,确认当前认证信息。先前登录过订阅账户,不代表这次请求仍然使用它;环境变量或其他服务配置可能改变认证方式。官方认证优先级说明对此有单独解释。

Invalid code:重新获取授权码,保留原终端

官方对 Invalid code 的说明是授权码已过期或被截断。文档没有给出可以普遍依赖的精确有效秒数,因此不用根据网上的“必须在多少秒内完成”来判断账户状态。

  1. 在当前登录提示中按 Enter 重试,重新发起授权。
  2. 使用这次新生成的链接;需要手动打开时,按 c 复制完整 URL,避免从终端选中文字时漏掉末尾。
  3. 在浏览器完成本次授权。如果页面给出需要回填的授权码,将完整内容粘贴到发起这次登录的终端。
  4. 不要把旧标签页中的码填进新登录流程,也不要把授权码当成 API key 保存到环境变量。

若浏览器已经成功,但 CLI 一直等待,重点就从“码是否正确”转为“结果能否返回终端”。在 WSL2、SSH 或容器里,浏览器所在机器和运行 Claude Code 的机器可能不同,自动回调不一定能到达。官方支持在本地浏览器打开终端显示的链接,再把页面给出的授权码粘贴回原终端;远程机器并不因此必须改用 API key。

如果粘贴看起来没有生效,换用终端自身的粘贴菜单或快捷键;也可以从 shell 运行下面的登录命令,它能从标准输入读取授权码:

bash
claude auth login

按这条命令新输出的提示完成操作,不要向它反复提交旧码。相关步骤见官方 WSL2、SSH 与容器登录排障。

403:先核对“这次用谁登录”,再查权限

403 Forbidden 说明请求被拒绝,但单独一个数字不能证明授权码过期、余额不足、地区受限或账户被封。保留错误正文,按你的认证方式检查。

使用 Claude Pro 或 Max 订阅:确认浏览器授权的是购买订阅的账户,并检查订阅是否仍有效。进入会话后用 /status 核对认证信息,避免浏览器登录正确、终端却仍使用其他凭据。

使用 Claude Console:让组织管理员在 Settings → Members 检查你是否具有 Claude Code 或 Developer 角色。能登录 Console,不等于已经具备 Claude Code 所需权限。

使用公司网络:让管理员核对代理是否拦截或改写了请求。公司网关拒绝访问和 Anthropic 账户拒绝访问,需要分别处理。以上三项是官方登录后 403 排障明确列出的检查方向。

曾经配置过 API key,就检查当前进程

在交互式 Claude Code 中,已获你批准使用的 ANTHROPIC_API_KEY 会优先于订阅 OAuth。非交互 -p 模式不同:只要存在该变量,就会使用它。ANTHROPIC_AUTH_TOKEN、服务提供方选择以及其他认证配置也可能影响结果;不能用一个简化排序覆盖所有环境。CLAUDE_CODE_OAUTH_TOKEN 会在每次新会话启动时重新读取。官方认证文档列出了适用条件。

先在启动出错 Claude Code 的同一终端查看哪些变量存在,不要打印密钥值。macOS、Linux、WSL 的 shell 可运行:

bash
for name in ANTHROPIC_API_KEY ANTHROPIC_AUTH_TOKEN CLAUDE_CODE_OAUTH_TOKEN ANTHROPIC_BASE_URL CLAUDE_CODE_USE_BEDROCK CLAUDE_CODE_USE_VERTEX CLAUDE_CODE_USE_FOUNDRY; do
  if printenv "$name" >/dev/null 2>&1; then
    printf '%s=已设置\n' "$name"
  fi
done

PowerShell 可用:

powershell
$names = 'ANTHROPIC_API_KEY', 'ANTHROPIC_AUTH_TOKEN', 'CLAUDE_CODE_OAUTH_TOKEN', 'ANTHROPIC_BASE_URL', 'CLAUDE_CODE_USE_BEDROCK', 'CLAUDE_CODE_USE_VERTEX', 'CLAUDE_CODE_USE_FOUNDRY'
foreach ($name in $names) {
    if ($null -ne [Environment]::GetEnvironmentVariable($name, 'Process')) {
        "$name=已设置"
    }
}

输出只说明变量存在,不说明它有效或一定正在使用;没有输出也不排除配置文件中的其他认证方式。比如你明确要使用订阅,却发现旧 API key 仍被批准使用,可只在当前 shell 临时移除该变量,再启动新的 Claude Code 会话:

bash
unset ANTHROPIC_API_KEY
claude

PowerShell 对应操作为 Remove-Item Env:ANTHROPIC_API_KEY。不要一次清空所有认证变量。重新进入后再用 /status 检查;若新开终端又出现旧变量,回头检查它的设置来源。IDE 扩展、IDE 终端和 SSH 远端进程可能继承不同环境,在一个终端修改变量不会自动修好所有客户端。

地区是否支持,需要单独确认

截至 2026 年 9 月 6 日,Anthropic 的官方支持国家和地区列表在 API 与 Claude.ai 两项中均未列出中国大陆,列有台湾。应按实际使用所在地和对应服务查表,不能因为使用中文就推断所在地,也不能因为一次 403 就认定是地区原因。

网络连通与服务使用资格是两件事。更改代理设置不能证明账户获得了使用资格;若错误正文明确涉及地区或账户限制,应保留原文向官方支持核实。

500:区分授权服务失败和模型请求失败

若浏览器还停在授权过程,或终端明确显示 OAuth 授权请求返回 500,先查看 Claude 服务状态与故障历史,对照你记录的时间及受影响服务。状态页有相符事件时,先等待恢复,再重新发起登录并使用新授权码;没有相符事件时,也不能据此认定本机配置正常,保留错误详情继续求助。

登录阶段出现 500 有公开个案:GitHub issue #44719记录了 2026 年 4 月 7 日、Claude Code 2.1.92 在 macOS/iTerm2 中授权请求失败的报告。该问题现已关闭,但这不证明你遇到同一个原因,也不能据此推导通用修复版本或当前正在发生全站故障。

如果已经登录,发送消息才收到 API Error: 500,则按官方模型请求 500 说明处理:检查实际服务方的状态,短暂等待后重试请求。配置了 ANTHROPIC_BASE_URL 时,请求可能发往自定义网关,应检查那个服务方;只看 Anthropic 状态页不够。

这两种情况的重试对象不同:授权失败要重新进行登录;模型请求失败先重试那次请求。不要因为每一次请求 500 都重新退出账户,也不要在授权页失败时循环发送模型消息。

浏览器能打开,但终端还是失败

浏览器代理设置不等于终端代理设置,尤其是在 VS Code、WSL、容器或 SSH 中。排查时先确定 Claude Code 实际运行在哪台机器、哪个进程环境,再检查该处的网络配置。

Claude Code 支持 HTTP/HTTPS 代理,目前读取顺序为 https_proxy、HTTPS_PROXY、http_proxy、HTTP_PROXY,不支持 SOCKS 代理。多个变量并存时,需要确认实际生效的是哪一个。公司使用自有证书颁发机构时,可按管理员提供的证书配置 NODE_EXTRA_CA_CERTS,不应通过关闭 TLS 证书验证解决问题。具体配置见官方企业网络说明。

测试某个网站根地址得到 HTTP 200 或 404,只能说明该次 HTTP 请求得到了响应,不能证明 OAuth 授权、回调或模型请求成功。更有用的对照是:在原本出错的执行环境里,用相同账户与预期认证方式完成一次新请求,并记录它是否仍返回原错误。

反复要求登录时,先重新认证,再考虑重置

出现未登录、令牌过期或已撤销的提示,可以先在 Claude Code 中运行 /login 重新认证。如果登录后很快再次失效,检查系统时间是否正确;在 macOS 上还可以运行:

bash
claude doctor

诊断会检查钥匙串相关问题。当前版本在钥匙串拒绝写入 OAuth 凭据时可能退回明文凭据存储,因此“钥匙串有问题”不等于“任何凭据都没有保存”。按官方令牌过期说明处理,不要为了排查而公开凭据文件内容。

只有重新登录仍不能解决、确实需要重置已保存登录时,再按官方重置步骤执行 /logout,关闭 Claude Code 后重新启动并登录。当前 /logout 还可能移除已保存的 MCP 登录和插件敏感值,操作前应确认自己能够重新完成这些配置。没有必要删除整个 ~/.claude 目录。

怎么确认已经修好,什么时候停止重试

恢复应同时满足两项:/status 显示你预期的认证方式;在原先出错的终端或客户端里,一次新的小请求成功返回。例如发送“只回复 OK,不读取或修改文件”,确认收到模型回答。这个请求会按实际账户的适用规则消耗额度或产生费用。

若你原本失败的是 -p 脚本,还应在脚本使用的相同环境重新验证;交互会话成功不能代替它,因为 API key 的使用条件不同。浏览器显示授权完成、凭据已保存,或换到另一个终端能用,都还没有验证原来的问题已经消失。

修复后的验证清单:用 status 核对认证方式,在原出错环境完成小请求,失败时记录错误并求助

图中账户、版本和终端输出均为示例。状态页用于对照故障记录,不能单独证明某个账户或请求正常;恢复结论仍以你的认证信息和实际请求结果为准。

完成对应分支后仍失败,就带着以下记录求助,避免反复删配置:

  • 错误发生时间和时区、完整错误文本及请求 ID(若有)。
  • claude --version 的结果、操作系统,以及是否在 WSL、SSH、容器或 IDE 中运行。
  • 登录阶段是否完成、哪一步首次报错、预期使用订阅还是 Console/其他服务。
  • /status 中可公开的认证类型、相关变量是否设置、已经做过的操作及结果。

发送前遮盖 API key、访问令牌、授权码、完整授权 URL、Cookie 和个人信息。账户登录循环、订阅识别或权限问题,使用登录后的 Get help 联系 Anthropic 支持;可复现的安装或客户端问题,可按官方求助说明使用 GitHub 或 /feedback。如果 Claude Code 命令本身无法启动,那是安装问题,可转到Claude Code 安装教程继续处理。

发现内容有误,或遇到文中没覆盖的问题?请把文章地址和你看到的情况发到 hi@laozhang.ai,核实后我们会更新正文。