所有文章
AIClaude

Claude Code API Error 401 OAuth token has expired 怎么办?实测 5 个有效解决办法

Claude Code API Error 401 OAuth token has expired 表示登录令牌过期、自动续期失败。我们在 Claude Code 2.1.312 上用模拟接口复现了报错,按登录方式整理了解决办法,包括 CLAUDE_CODE_OAUTH_TOKEN、脚本和 SDK 场景。

Claude Code API Error 401 OAuth token has expired:一个沙子已经漏完的黏土小沙漏,柔和自然光和树叶影子
其他语言

先说结论:Claude Code API Error 401 OAuth token has expired 的意思是登录令牌过期了,自动续期又没成功,API 拒绝了这次请求。完整报错一般是 Please run /login · API Error: 401 OAuth token has expired. Please obtain a new token or refresh your existing token.。大多数情况在会话里输入 /login 重新登录就好。如果你是自己设置的 CLAUDE_CODE_OAUTH_TOKEN(CI、脚本、Docker 里常见),光 /login 不够,新会话还会读旧值,要用 claude setup-token 生成新令牌替换掉。我们在 Claude Code 2.1.312 上用模拟接口和一个过期令牌复现了这个报错,输出在下面。报错原文和处理办法以 Claude Code 官方报错文档 为准(2026 年 10 月 29 日核对)。

Claude Code API Error 401 OAuth token has expired 是什么意思

Claude Code API Error 401 OAuth token has expired 和相近报错对照:OAuth token revoked、Login expired、Invalid authentication credentials、Not logged in

官方文档把两条报错放在一起讲:

  • OAuth token revoked · Please run /login:令牌被吊销,比如你在所有设备上退出了登录,或者管理员移除了你的权限。
  • Please run /login · API Error: 401 OAuth token has expired ...:令牌过期,会话中途自动续期失败。

两条都是 Claude Code 真把请求发出去之后,API 返回的拒绝。-p 模式和 Agent SDK 里写法是 Failed to authenticate. API Error: 401 OAuth token has expired ...,结构化错误码是 authentication_failed。

容易混的还有三条:

  • Login expired · Please run /login:Claude Code 自己续期失败、已经清掉了保存的登录,请求根本没发出去。
  • API Error: 401 Invalid authentication credentials:不是过期,是账号、组织或 API key 不再被接受。
  • Not logged in · Please run /login:压根没找到任何凭据。

实测:过期令牌每次请求都 401

Claude Code API Error 401 OAuth token has expired 模拟接口实测:claude -p 返回 401,claude auth status 仍显示 loggedIn true

真实的订阅令牌没法按需让它过期,所以我们用 ANTHROPIC_BASE_URL 把 Claude Code 2.1.312 指向一个本地模拟接口。它对所有请求都返回 401,内容是 {"type":"authentication_error","message":"OAuth token has expired. Please obtain a new token or refresh your existing token."},和 GitHub 上用户贴出来的原文一致。CLAUDE_CODE_OAUTH_TOKEN 设成一个假的 sk-ant-oat01-...。

  • claude -p hi 输出:Failed to authenticate. API Error: 401 OAuth token has expired. Please obtain a new token or refresh your existing token. 加上 --output-format json,结果里是 "is_error": true、"api_error_status": 401。
  • 模拟接口一共收到 4 个请求,全都带着 Authorization: Bearer sk-ant-oat01-...。也就是说,Claude Code 一直在发你设置的那个值,和文档说的一样。
  • 这时运行 claude auth status,显示的还是 "loggedIn": true, "authMethod": "oauth_token"。这个命令只告诉你配置了哪种凭据,不会去验证令牌还能不能用,别被它骗了。
  • unset CLAUDE_CODE_OAUTH_TOKEN 之后(本机没有保存的登录),报错变成 Not logged in · Please run /login;换成 API key 指向正常应答的模拟接口,同一句话就能拿到回复。

另外我们用一个格式不对的令牌请求真实 API,返回的是 API Error: 401 OAuth access token is invalid.,这和“过期”不是一回事:invalid 说明令牌本身不被认可(我们这次是故意用了格式不对的令牌),expired 才是过期。

Claude Code API Error 401 OAuth token has expired 怎么解决

Claude Code API Error 401 OAuth token has expired 解决步骤:/status、/login、claude setup-token、新终端里 claude auth login、检查系统时间和 claude doctor
  • 先看用的是哪种凭据:运行 /status。如果是你自己设置的令牌,会显示一行 Auth token,值为 CLAUDE_CODE_OAUTH_TOKEN。
  • 保存的登录:在会话里 /login 重新登录。
  • -p 或 Agent SDK 用的是保存的登录:在同一个环境里先运行 claude,完成 /login,再重跑命令。
  • 用 CLAUDE_CODE_OAUTH_TOKEN 的:在有浏览器的机器上运行 claude setup-token,复制输出的令牌,替换旧值:
export CLAUDE_CODE_OAUTH_TOKEN=新令牌

文档说 setup-token 生成的令牌有效期一年,而且不会自动保存,要自己复制。旧值如果写在 shell 配置文件或 settings.json 的 env 里,也要一起改,不然新会话还会读到旧的。v2.1.225 之前还有个问题:会话中途可能把变量的值换成本地保存的短期令牌,过一会儿又过期,版本太老的先更新。

  • 没有浏览器的自动化环境:直接用 ANTHROPIC_API_KEY,或者用 setup-token 的令牌。
  • 每次启动都要求登录:检查系统时间准不准,令牌校验依赖时间。macOS 上运行 claude doctor,按 官方登录排查文档 处理钥匙串。

按登录方式对号入座

Claude Code API Error 401 OAuth token has expired 按登录方式处理:保存的 /login 登录、CLAUDE_CODE_OAUTH_TOKEN、API key

从 v2.1.210 起,保存的登录续不上时,/status 会多一行 Login,值为 Expired — log in again。官方认证文档 还提到,登录还剩 3 天到期时,启动会提示 Your login expires in 3 days · run /login to renew。要挂长任务的话,看到这条就先续上,免得跑到一半断掉。还没装好 Claude Code 的,可以先看 Claude Code 安装教程。

/login 也不管用?GitHub 上的案例

下面几个都是旧版本上报的,现在已经关闭,但能说明大家实际遇到了什么:

  • #15007:会话里出现 401 后执行 /login,浏览器那边登录成功了,会话还是一直报错。有位 Windows 用户在评论里说,把 Claude 进程结束掉重开就恢复了。
  • #44729:/login 打开浏览器后超时,报 OAuth error: timeout of 15000ms exceeded。
  • #33291:VS Code 插件里遇到,当时状态页正好有故障,报告者在终端运行 claude auth login 解决。

所以 /login 成功了下一句还报错,就退出 Claude Code 重新启动(用 claude --continue 接回刚才的对话)再试。在 WSL2、SSH 或容器里浏览器登录不了的,看 官方的处理步骤。其他报错见 Claude Code 报错大全。

常见问题

Claude Code API Error 401 OAuth token has expired 是订阅到期了吗?

不是,只是登录令牌的问题。权限被移除时显示的是 OAuth token revoked,账号或组织被停用时是 Invalid authentication credentials。

为什么 claude auth status 显示已登录?

它只看配置了哪种凭据,不验证 API 还认不认。我们实测过期令牌下它仍显示 loggedIn: true。

setup-token 生成的令牌能用多久?

官方文档写的是一年。

改用 API key 能解决吗?

能,但按 API 价格计费。ANTHROPIC_API_KEY 的优先级高于订阅登录(交互模式下会先问你一次要不要用)。订阅额度怎么算可以看 Claude 额度怎么算。

留下你的想法

你的邮箱不会公开。