
1. OpenClaw 報 session expired 與 Authentication token invalid 到底卡在哪OpenClaw 是一個把大模型能力接進本地終端的命令行工具你可以把它理解成一個“住在你終端里的 AI 助手”敲一行openclaw 分析這段代碼它就去調(diào)用背后的模型接口把結(jié)果打回屏幕。它適合誰適合習(xí)慣在終端里干活、又想把模型調(diào)用嵌進腳本或 CI 流程的開發(fā)者。而session expired、Authentication token invalid、token_expired、OAuth token invalid這幾類報錯本質(zhì)是同一件事的不同外衣——OpenClaw 手里那份“身份憑證”失效了服務(wù)端不認它了。先看幾個真實會撞上的報錯形態(tài)$ 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.這四種報錯分別對應(yīng)不同的失效路徑Session expired多半是交互式會話超時401 Unauthorized是密鑰本身無效或被撤銷token_expired是令牌到了時限OAuth token invalid則是 OAuth 刷新鏈路斷了。很多人一看到報錯就去重裝 OpenClaw其實完全沒必要——問題不在程序在憑證。我踩過的坑是一開始只盯著環(huán)境變量反復(fù)export新 Key 卻還是 401后來才發(fā)現(xiàn) OpenClaw 會優(yōu)先讀auth.json里的字段環(huán)境變量反而被覆蓋了。所以排查順序應(yīng)該是先看 auth.json再看環(huán)境變量最后才懷疑網(wǎng)絡(luò)。這篇就按這個順序把auth.json的字段配置、可復(fù)制的 JSON 片段、逐步驗證動作全部拆開講目標是一次性把 token 失效類報錯排干凈。需要說明的是下面所有配置示例里的 Base URL 和 Key都可以換成你自己的接入端點。如果你手頭還沒有可用的 Key可以先去 TaoToken 的 API Keys 頁面 生成一個再回來對照配置。整個流程不涉及任何網(wǎng)絡(luò)工具純本地文件操作加一條 curl 驗證。2. 動手前的前置準備auth.json 在哪、字段長什么樣在改任何東西之前先搞清楚 OpenClaw 到底從哪里讀憑證。不同版本略有差異但主流路徑是這幾個~/.openclaw/auth.json # 主憑證文件優(yōu)先級最高 ~/.openclaw/credentials.json # 舊版 OAuth 憑證 ~/.openclaw/session* # 會話緩存你可以先用一條命令把目錄結(jié)構(gòu)看清楚ls -la ~/.openclaw/如果auth.json存在直接看內(nèi)容注意別把 Key 貼到公開地方cat ~/.openclaw/auth.json一個標準的auth.json結(jié)構(gòu)大致是這樣字段名和層級要和你的版本對齊{ 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是默認調(diào)用的模型 ID寫錯會報模型不存在而不是認證錯誤別混淆auth_type決定走 API Key 還是 OAuth如果你用的是 Key 卻寫成oauth就會一直觸發(fā)OAuth token invalidexpires_at為null表示不過期如果是時間戳過期后就會拋token_expired。如果你還沒生成 Key先去 TaoToken 控制臺 創(chuàng)建拿到形如sk-開頭的字符串。生成后建議先別急著寫進文件用第 4 節(jié)的 curl 驗證一遍有效性確認能用再落盤能省掉一輪“到底是 Key 錯還是配置錯”的糾結(jié)。另外提醒一點auth.json的權(quán)限要收緊否則某些版本會因為權(quán)限過寬拒絕讀取chmod 600 ~/.openclaw/auth.json這一步很多人忽略結(jié)果文件明明寫對了卻還是報認證失敗白白繞遠路。3. 可復(fù)制的 auth.json 配置與三件套對齊這一節(jié)是核心。OpenClaw 的認證問題九成出在“三件套”沒對齊Base URL、Key、Model ID。三者必須來自同一個接入端點混用就會 401。下面給你一份可直接復(fù)制的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 最穩(wěn)避免編輯器引入不可見字符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如果你更習(xí)慣用環(huán)境變量兜底可以同時設(shè)置但要知道優(yōu)先級auth.json 高于環(huán)境變量。所以當(dāng)你改了環(huán)境變量卻沒生效時先回頭看看 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 字段環(huán)境變量常見錯誤Base URLbase_urlANTHROPIC_BASE_URL末尾多斜杠、寫成網(wǎng)頁地址Keyapi_keyANTHROPIC_API_KEY復(fù)制時帶空格、Key 已撤銷Model IDmodel無寫成展示名而非 ID這里要特別強調(diào)base_url填的是 API 端點不是官網(wǎng)首頁。很多人把https://taotoken.net直接填進去結(jié)果請求打到網(wǎng)頁路徑上返回一堆 HTMLOpenClaw 解析失敗就報認證異常。正確寫法是https://taotoken.net/api。如果你用的是 Claude Code 這類工具配置思路一致只是文件位置換成對應(yīng)的 settings 文件字段名可能叫env包裹但三件套邏輯不變。寫完別急著跑復(fù)雜任務(wù)先用最簡單的--print驗證下一節(jié)講。4. 逐步驗證從 curl 到 openclaw --print 的成功結(jié)果配置寫完驗證要分層做一層層排除別一上來就跑大任務(wù)。第一層先用 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是權(quán)限或賬戶限制返回404多半是base_url路徑寫錯了。這一步能把“網(wǎng)絡(luò)問題”和“憑證問題”徹底分開。第二層驗證 OpenClaw 是否讀到了配置openclaw --print hello成功時你會看到模型返回的一句問候類似Hello! How can I help you today?如果這一步還報Session expired說明 OpenClaw 讀的不是你剛寫的 auth.json檢查路徑和權(quán)限如果報401說明讀到了但 Key 不對回到第 3 節(jié)核對三件套。第三層清掉可能殘留的舊會話緩存再試rm -rf ~/.openclaw/session* rm -rf ~/.openclaw/credentials.json openclaw --print hello舊緩存里可能存著已經(jīng)失效的 OAuth 令牌不清掉的話即使 auth.json 寫對了程序也可能優(yōu)先用緩存里的舊憑證繼續(xù)拋OAuth token invalid。清完再驗證一次通常就恢復(fù)了。第四層跑一個真實小任務(wù)確認端到端可用openclaw 用一句話解釋什么是遞歸能正常返回解釋說明會話恢復(fù)完成。到這里session expired和Authentication token invalid應(yīng)該都不再出現(xiàn)。如果你還想在瀏覽器里直觀對比模型輸出可以打開 TaoToken 模型對話 頁面用同一個 Key 試一句兩邊結(jié)果一致就說明配置沒問題。5. 本篇常見錯排查401、local proxy failed、reading choices、OAuth排障最怕對著報錯瞎猜下面把幾個高頻報錯和真實原因?qū)ι咸枴?01 Unauthorized / Invalid authentication tokenKey 無效、被撤銷或 auth.json 里的 Key 和環(huán)境變量沖突。先cat ~/.openclaw/auth.json看實際值再 curl 驗證。注意 Key 復(fù)制時首尾容易帶空格或換行用echo -n檢查長度。local proxy failed這個報錯和認證無關(guān)通常是本地端口被占或代理配置殘留。檢查是否有舊的 OpenClaw 進程沒退干凈ps aux | grep openclaw kill -9 PID然后確認沒有多余的HTTP_PROXY環(huán)境變量干擾env | grep -i proxy有就unset掉再試。Error reading choices / reading choices這是響應(yīng)解析失敗多半是base_url指到了網(wǎng)頁而非 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 指向網(wǎng)頁改為 API 端點OAuth token invalidauth_type 寫錯改回 api_key 并清緩存token_expiredexpires_at 過期置 null 或換 Key排查時建議一次只改一個變量改完立刻驗證否則多個改動疊加成功了也不知道是哪一步起的作用。這套方法我在多個終端工具上都用過邏輯是通用的。6. 長期穩(wěn)定把憑證管理變成習(xí)慣會話過期這類問題本質(zhì)是憑證生命周期管理沒跟上。給你幾個能長期省事的做法。CI/CD 場景用 API Key因為它不會自動過期適合無人值守交互式本地開發(fā)可以用 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)更穩(wěn)能處理帶空格的值。如果你要長期跑編碼類任務(wù)或 Agent 流程頻繁手動換 Key 很煩可以考慮用 TaoToken Coding Plan 這類面向持續(xù)調(diào)用的方案減少憑證輪換頻率。配置細節(jié)和字段說明可以對照 接入文檔 逐項核對文檔里的字段名和本文示例保持一致照著改不會錯位。最后留一個自查清單下次再撞上 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 收權(quán)限 6. env | grep -i proxy 排代理干擾 7. 401Key 問題403權(quán)限問題reading choices端點問題把這幾步跑完token 失效類報錯基本一次清干凈。真正省時間的不是記住所有報錯而是記住“先看 auth.json再 curl最后清緩存”這個固定順序。