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

> 按报错发生步骤排查 Claude Code 登录：更新失效授权码、处理 WSL/SSH 回调、核对 403 权限与认证冲突，区分登录 500 和模型请求 500，并验证是否恢复。

- Source: https://www.aifreeapi.com/zh/posts/claude-code-oauth-error
- Language: zh
- Published: 2026-09-06
- Updated: 2026-09-06
- Publisher: AI Free API (https://www.aifreeapi.com)

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，再验证恢复结果](https://www.aifreeapi.com/posts/zh/claude-code-oauth-error/img/troubleshooting-branches.webp)

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

如果能进入 Claude Code 会话，先输入 `/status`，确认当前认证信息。先前登录过订阅账户，不代表这次请求仍然使用它；环境变量或其他服务配置可能改变认证方式。[官方认证优先级说明](https://code.claude.com/docs/en/authentication#authentication-precedence)对此有单独解释。

## Invalid code：重新获取授权码，保留原终端

[官方对 Invalid code 的说明](https://code.claude.com/docs/en/troubleshoot-install#oauth-error-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 与容器登录排障](https://code.claude.com/docs/en/troubleshoot-install#oauth-login-fails-in-wsl2-ssh-or-containers)。

## 403：先核对“这次用谁登录”，再查权限

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

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

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

使用公司网络：让管理员核对代理是否拦截或改写了请求。公司网关拒绝访问和 Anthropic 账户拒绝访问，需要分别处理。以上三项是[官方登录后 403 排障](https://code.claude.com/docs/en/troubleshoot-install#403-forbidden-after-login)明确列出的检查方向。

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

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

先在**启动出错 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 的[官方支持国家和地区列表](https://www.anthropic.com/supported-countries)在 API 与 Claude.ai 两项中均未列出中国大陆，列有台湾。应按实际使用所在地和对应服务查表，不能因为使用中文就推断所在地，也不能因为一次 403 就认定是地区原因。

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

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

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

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

如果已经登录，发送消息才收到 `API Error: 500`，则按[官方模型请求 500 说明](https://code.claude.com/docs/en/errors#api-error-500-internal-server-error)处理：检查实际服务方的状态，短暂等待后重试请求。配置了 `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 证书验证解决问题。具体配置见[官方企业网络说明](https://code.claude.com/docs/en/network-config)。

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

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

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

```bash
claude doctor
```

诊断会检查钥匙串相关问题。当前版本在钥匙串拒绝写入 OAuth 凭据时可能退回明文凭据存储，因此“钥匙串有问题”不等于“任何凭据都没有保存”。按[官方令牌过期说明](https://code.claude.com/docs/en/troubleshoot-install#not-logged-in-or-token-expired)处理，不要为了排查而公开凭据文件内容。

只有重新登录仍不能解决、确实需要重置已保存登录时，再按[官方重置步骤](https://code.claude.com/docs/en/troubleshoot-install#reset-your-login)执行 `/logout`，关闭 Claude Code 后重新启动并登录。**当前 `/logout` 还可能移除已保存的 MCP 登录和插件敏感值**，操作前应确认自己能够重新完成这些配置。没有必要删除整个 `~/.claude` 目录。

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

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

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

![修复后的验证清单：用 status 核对认证方式，在原出错环境完成小请求，失败时记录错误并求助](https://www.aifreeapi.com/posts/zh/claude-code-oauth-error/img/recovery-verification.webp)

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

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

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

发送前遮盖 API key、访问令牌、授权码、完整授权 URL、Cookie 和个人信息。账户登录循环、订阅识别或权限问题，使用登录后的 `Get help` 联系 Anthropic 支持；可复现的安装或客户端问题，可按[官方求助说明](https://code.claude.com/docs/en/troubleshoot-install#still-stuck)使用 GitHub 或 `/feedback`。如果 Claude Code 命令本身无法启动，那是安装问题，可转到[Claude Code 安装教程](/zh/posts/claude-code-installation-guide)继续处理。
