☰
【Bug已解决】openclaw session expired / Authentication token invalid — OpenClaw 会话过期解决方案:把 auth.json 改到 T
2026/10/2 9:35:05 网站建设 项目流程

1. OpenClaw 报 session expired 与 Authentication token invalid 到底卡在哪

OpenClaw 是一个把大模型能力接进本地终端的命令行工具,你可以把它理解成一个“住在你终端里的 AI 助手”:敲一行openclaw "分析这段代码",它就去调用背后的模型接口,把结果打回屏幕。它适合谁?适合习惯在终端里干活、又想把模型调用嵌进脚本或 CI 流程的开发者。而session expired、Authentication token invalid、token_expired、OAuth token invalid这几类报错,本质是同一件事的不同外衣——OpenClaw 手里那份“身份凭证”失效了,服务端不认它了。

先看几个真实会撞上的报错形态:

$ openclaw "分析代码" Error: Session expired Your session has expired. Please re-authenticate. $ openclaw --print "task" Error: 401 Unauthorized Invalid authentication token. $ openclaw "task" Error: token_expired Your API token has expired. Please refresh. $ openclaw Error: OAuth token invalid Please re-authenticate.

这四种报错分别对应不同的失效路径:Session expired多半是交互式会话超时;401 Unauthorized是密钥本身无效或被撤销;token_expired是令牌到了时限;OAuth token invalid则是 OAuth 刷新链路断了。很多人一看到报错就去重装 OpenClaw,其实完全没必要——问题不在程序,在凭证。

我踩过的坑是:一开始只盯着环境变量,反复export新 Key 却还是 401,后来才发现 OpenClaw 会优先读auth.json里的字段,环境变量反而被覆盖了。所以排查顺序应该是先看 auth.json,再看环境变量,最后才怀疑网络。这篇就按这个顺序,把auth.json的字段配置、可复制的 JSON 片段、逐步验证动作全部拆开讲,目标是一次性把 token 失效类报错排干净。

需要说明的是,下面所有配置示例里的 Base URL 和 Key,都可以换成你自己的接入端点。如果你手头还没有可用的 Key,可以先去 TaoToken 的 API Keys 页面 生成一个,再回来对照配置。整个流程不涉及任何网络工具,纯本地文件操作加一条 curl 验证。

2. 动手前的前置准备:auth.json 在哪、字段长什么样

在改任何东西之前,先搞清楚 OpenClaw 到底从哪里读凭证。不同版本略有差异,但主流路径是这几个:

~/.openclaw/auth.json # 主凭证文件,优先级最高 ~/.openclaw/credentials.json # 旧版 OAuth 凭证 ~/.openclaw/session* # 会话缓存

你可以先用一条命令把目录结构看清楚:

ls -la ~/.openclaw/

如果auth.json存在,直接看内容(注意别把 Key 贴到公开地方):

cat ~/.openclaw/auth.json

一个标准的auth.json结构大致是这样,字段名和层级要和你的版本对齐:

{ "base_url": "https://taotoken.net/api", "api_key": "sk-xxxxxxxxxxxxxxxx", "model": "claude-sonnet-4-20250514", "auth_type": "api_key", "expires_at": null }

这里每个字段都有讲究。base_url是请求端点,末尾不要带多余斜杠;api_key是身份凭证本体;model是默认调用的模型 ID,写错会报模型不存在而不是认证错误,别混淆;auth_type决定走 API Key 还是 OAuth,如果你用的是 Key 却写成oauth,就会一直触发OAuth token invalid;expires_at为null表示不过期,如果是时间戳,过期后就会抛token_expired。

如果你还没生成 Key,先去 TaoToken 控制台 创建,拿到形如sk-开头的字符串。生成后建议先别急着写进文件,用第 4 节的 curl 验证一遍有效性,确认能用再落盘,能省掉一轮“到底是 Key 错还是配置错”的纠结。

另外提醒一点:auth.json的权限要收紧,否则某些版本会因为权限过宽拒绝读取:

chmod 600 ~/.openclaw/auth.json

这一步很多人忽略,结果文件明明写对了却还是报认证失败,白白绕远路。

3. 可复制的 auth.json 配置与三件套对齐

这一节是核心。OpenClaw 的认证问题,九成出在“三件套”没对齐:Base URL、Key、Model ID。三者必须来自同一个接入端点,混用就会 401。下面给你一份可直接复制的auth.json,路径就是~/.openclaw/auth.json:

{ "base_url": "https://taotoken.net/api", "api_key": "sk-替换成你自己的Key", "model": "claude-sonnet-4-20250514", "auth_type": "api_key", "expires_at": null, "timeout": 60 }

写入方式用 heredoc 最稳,避免编辑器引入不可见字符:

cat > ~/.openclaw/auth.json << 'EOF' { "base_url": "https://taotoken.net/api", "api_key": "sk-替换成你自己的Key", "model": "claude-sonnet-4-20250514", "auth_type": "api_key", "expires_at": null, "timeout": 60 } EOF chmod 600 ~/.openclaw/auth.json

如果你更习惯用环境变量兜底,可以同时设置,但要知道优先级:auth.json 高于环境变量。所以当你改了环境变量却没生效时,先回头看看 auth.json 是不是还留着旧 Key。

export ANTHROPIC_API_KEY=sk-替换成你自己的Key export ANTHROPIC_BASE_URL=https://taotoken.net/api

想永久生效就写进 shell 配置:

echo 'export ANTHROPIC_API_KEY=sk-替换成你自己的Key' >> ~/.bashrc echo 'export ANTHROPIC_BASE_URL=https://taotoken.net/api' >> ~/.bashrc source ~/.bashrc

三件套对照表,方便你逐项核对:

配置项auth.json 字段环境变量常见错误
Base URLbase_urlANTHROPIC_BASE_URL末尾多斜杠、写成网页地址
Keyapi_keyANTHROPIC_API_KEY复制时带空格、Key 已撤销
Model IDmodel无写成展示名而非 ID

这里要特别强调:base_url填的是 API 端点,不是官网首页。很多人把https://taotoken.net直接填进去,结果请求打到网页路径上,返回一堆 HTML,OpenClaw 解析失败就报认证异常。正确写法是https://taotoken.net/api。如果你用的是 Claude Code 这类工具,配置思路一致,只是文件位置换成对应的 settings 文件,字段名可能叫env包裹,但三件套逻辑不变。

写完别急着跑复杂任务,先用最简单的--print验证,下一节讲。

4. 逐步验证:从 curl 到 openclaw --print 的成功结果

配置写完,验证要分层做,一层层排除,别一上来就跑大任务。第一层,先用 curl 直接打接口,确认 Key 和端点本身是通的:

curl -s https://taotoken.net/api/v1/messages \ -H "x-api-key: sk-替换成你自己的Key" \ -H "anthropic-version: 2023-06-01" \ -H "content-type: application/json" \ -d '{"model":"claude-sonnet-4-20250514","max_tokens":10,"messages":[{"role":"user","content":"hi"}]}'

如果返回里带content字段和一段文本,说明 Key 有效、端点正确。如果返回401,Key 无效或被撤销;返回403,是权限或账户限制;返回404,多半是base_url路径写错了。这一步能把“网络问题”和“凭证问题”彻底分开。

第二层,验证 OpenClaw 是否读到了配置:

openclaw --print "hello"

成功时你会看到模型返回的一句问候,类似:

Hello! How can I help you today?

如果这一步还报Session expired,说明 OpenClaw 读的不是你刚写的 auth.json,检查路径和权限;如果报401,说明读到了但 Key 不对,回到第 3 节核对三件套。

第三层,清掉可能残留的旧会话缓存再试:

rm -rf ~/.openclaw/session* rm -rf ~/.openclaw/credentials.json openclaw --print "hello"

旧缓存里可能存着已经失效的 OAuth 令牌,不清掉的话,即使 auth.json 写对了,程序也可能优先用缓存里的旧凭证,继续抛OAuth token invalid。清完再验证一次,通常就恢复了。

第四层,跑一个真实小任务确认端到端可用:

openclaw "用一句话解释什么是递归"

能正常返回解释,说明会话恢复完成。到这里,session expired和Authentication token invalid应该都不再出现。如果你还想在浏览器里直观对比模型输出,可以打开 TaoToken 模型对话 页面,用同一个 Key 试一句,两边结果一致就说明配置没问题。

5. 本篇常见错排查:401、local proxy failed、reading choices、OAuth

排障最怕对着报错瞎猜,下面把几个高频报错和真实原因对上号。

401 Unauthorized / Invalid authentication token:Key 无效、被撤销,或 auth.json 里的 Key 和环境变量冲突。先cat ~/.openclaw/auth.json看实际值,再 curl 验证。注意 Key 复制时首尾容易带空格或换行,用echo -n检查长度。

local proxy failed:这个报错和认证无关,通常是本地端口被占或代理配置残留。检查是否有旧的 OpenClaw 进程没退干净:

ps aux | grep openclaw kill -9 <PID>

然后确认没有多余的HTTP_PROXY环境变量干扰:

env | grep -i proxy

有就unset掉再试。

Error reading choices / reading choices:这是响应解析失败,多半是base_url指到了网页而非 API,返回了 HTML,程序按 JSON 解析就崩了。确认base_url是https://taotoken.net/api这种纯接口路径,末尾不带/v1之外的冗余段。

OAuth token invalid:如果你用的是 API Key,却把auth_type写成了oauth,就会一直走 OAuth 刷新逻辑然后失败。把auth_type改回api_key,并删掉credentials.json里的旧 OAuth 残留。

token_expired:检查expires_at字段,如果是过去的时间戳,改成null或重新生成 Key。

对照表再收一遍:

报错最可能原因处理动作
401 UnauthorizedKey 无效/冲突核对 auth.json 与 curl 验证
local proxy failed进程残留/代理变量kill 进程、unset proxy
reading choicesbase_url 指向网页改为 API 端点
OAuth token invalidauth_type 写错改回 api_key 并清缓存
token_expiredexpires_at 过期置 null 或换 Key

排查时建议一次只改一个变量,改完立刻验证,否则多个改动叠加,成功了也不知道是哪一步起的作用。这套方法我在多个终端工具上都用过,逻辑是通用的。

6. 长期稳定:把凭证管理变成习惯

会话过期这类问题,本质是凭证生命周期管理没跟上。给你几个能长期省事的做法。

CI/CD 场景用 API Key,因为它不会自动过期,适合无人值守;交互式本地开发可以用 OAuth,让它自动刷新。但无论哪种,都别把 Key 硬编码进脚本提交到仓库。用.env文件加.gitignore隔离:

cat > .env << 'EOF' ANTHROPIC_API_KEY=sk-替换成你自己的Key ANTHROPIC_BASE_URL=https://taotoken.net/api EOF echo '.env' >> .gitignore

加载时用set -a; source .env; set +a,比export $(cat .env | xargs)更稳,能处理带空格的值。

如果你要长期跑编码类任务或 Agent 流程,频繁手动换 Key 很烦,可以考虑用 TaoToken Coding Plan 这类面向持续调用的方案,减少凭证轮换频率。配置细节和字段说明可以对照 接入文档 逐项核对,文档里的字段名和本文示例保持一致,照着改不会错位。

最后留一个自查清单,下次再撞上 session expired,按顺序过一遍就行:

1. cat ~/.openclaw/auth.json 看三件套 2. curl 打 /v1/messages 验证 Key 3. openclaw --print "hello" 验证读取 4. rm -rf ~/.openclaw/session* 清缓存 5. chmod 600 ~/.openclaw/auth.json 收权限 6. env | grep -i proxy 排代理干扰 7. 401=Key 问题,403=权限问题,reading choices=端点问题

把这几步跑完,token 失效类报错基本一次清干净。真正省时间的不是记住所有报错,而是记住“先看 auth.json,再 curl,最后清缓存”这个固定顺序。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询