尧图精选

【Bug已解决】openclaw session expired / Authentication token invalid — OpenClaw 会话过期解决方案:把 auth.json 改到 T

🕒 发布时间:2026/10/2 9:35:12 📁 来源:尧图网络
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 invalidexpires_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_KEYsk-替换成你自己的Key export ANTHROPIC_BASE_URLhttps://taotoken.net/api想永久生效就写进 shell 配置echo export ANTHROPIC_API_KEYsk-替换成你自己的Key ~/.bashrc echo export ANTHROPIC_BASE_URLhttps://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直接填进去结果请求打到网页路径上返回一堆 HTMLOpenClaw 解析失败就报认证异常。正确写法是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 有效、端点正确。如果返回401Key 无效或被撤销返回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 tokenKey 无效、被撤销或 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 proxyreading 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_KEYsk-替换成你自己的Key ANTHROPIC_BASE_URLhttps://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. 401Key 问题403权限问题reading choices端点问题把这几步跑完token 失效类报错基本一次清干净。真正省时间的不是记住所有报错而是记住“先看 auth.json再 curl最后清缓存”这个固定顺序。
上一篇/下一篇内容由系统自动关联 返回资讯列表 →