Claude Codeで「OAuth session expired and could not be refreshed」と表示されたら、まずターミナルでClaude Codeを開き、/loginで再認証します。
このエラーは、OAuthセッションが期限切れになり、自動更新にも失敗した状態を示します。
改善しない場合は、/logoutからの再ログインや認証情報の保存先を確認し、CI・cronだけで起きる場合は自動実行環境の認証方法を切り分けます。
claude -pで失敗した場合は、そのコマンドと同じ実行ユーザー・設定ディレクトリの環境でclaudeを起動して再認証し、元のコマンドを実行し直してください。
Failed to authenticate: OAuth session expired and could not be refreshed
Claude Code に再度サインインする必要があります。
ターミナルで Claude Code を開き、
/loginを実行してから、メッセージを再度送信してください。
エラーの原因と仕組み
Claude Code を claude.ai アカウント(Pro / Max / Team)で認証して利用する場合、認証方式には API キーではなく OAuth が用いられます。
ブラウザ経由でログインすると、CLI は2種類のトークンをローカル環境へ保存します。
| トークン | 役割 | 有効期限の目安 |
|---|---|---|
| アクセストークン | API リクエスト送信時に付与 | 環境・仕様による。固定時間を保証しない |
| リフレッシュトークン | アクセストークンを自動更新するための情報 | 環境・仕様による。setup-tokenとは区別する |
通常、アクセストークンの有効期限が切れても、CLI がリフレッシュトークンを用いてバックグラウンドで自動更新します。
公式の認証資料では、保存済みログインが期限切れで更新できない場合は再ログインが必要とされています。
/statusで使用中の認証方法も確認します。
したがって、OAuth session expired and could not be refreshed というエラーは、「期限切れが発生した」だけでなく「自動更新にも失敗した」状態を示しています。
そのため、単なる時間経過以外の要因が影響している可能性があります。
主な原因パターン
1. 長期間未使用による期限切れ
保存済みログインの期限切れが考えられます。
ただし、未使用期間だけで原因を確定したり、通常のトークンの有効期間を一律に決めたりはできません。
保存済みログインの期限切れが原因なら、/loginで再認証してから再試行します。
2. 複数環境での再ログインによる競合
同じ認証ストアを共有するプロセスの更新競合は、切り分ける候補です。
別々にログインした複数端末が常に互いの認証を無効化する仕様とは確認できません。
特定のサーバー環境でのみ突然エラーが発生するようになった場合は、他環境でのログイン状況を確認してください。
3. アカウントや所属組織の切り替え
個人アカウントと組織アカウントを切り替えた場合、保存済みトークンのスコープや権限に不整合が生じることがあります。
この状況では、関連するエラーメッセージが表示される場合もあります。
signed-in claude.ai account or organization changed on this machinedoes not meet scope requirement user:profileClaude.ai login was rejected — run /login, then /remote-control
4. 認証情報ストアへのアクセス不備・破損
保存先はOSで異なります。
macOSはKeychain、WindowsとLinuxは認証ファイルが基本です。
該当ストレージの破損や読み込み権限の不足が生じていると、トークンの更新処理に失敗します。
| OS | 保存先 |
|---|---|
| macOS | macOS Keychain(管理はClaude Codeの認証操作で行う) |
| Windows | %USERPROFILE%\.claude\.credentials.json |
| Linux / WSL | ~/.claude/.credentials.json(Linuxのファイルモードは0600) |
macOSもKeychainへの書込みに失敗すると認証ファイルへ退避します。
CLAUDE_CONFIG_DIRが設定されていれば、保存先はそのディレクトリです。
保存先とアクセス状態を確認し、まず公式の再認証手順を使ってください。
主な破損要因には次のようなものがあります。
- ホームディレクトリを別ユーザー権限(
sudoなど)で操作してパーミッションが壊れた - dotfiles の同期・復元で
~/.claude/を巻き戻した - Docker / devcontainer でホームがマウントされておらず毎回リセットされる
- キーチェーンがロックされたままの GUI なしセッション(SSH ログインなど)
5. ヘッドレス実行(claude -p)や CI・cron での失敗
非対話型の自動実行環境特有の事象も報告されています。
対話モードでは正常に動作するものの、claude -p による非対話実行時に同エラーで終了する事例が公式リポジトリの Issue に複数報告されています(#79685、#81937)。
$ env -i HOME="$HOME" PATH="$HOME/.local/bin:/usr/local/bin:/usr/bin:/bin" \
claude -p "reply with exactly: ok"
Failed to authenticate: OAuth session expired and could not be refreshed
# exit status 1(約2秒で終了)
引用したIssueには更新競合を疑う報告がありますが、全環境の原因が確定したものではありません。
#79685は非活動を理由にクローズされており、修正完了の証拠ではありません。
実行ユーザー・Claude Codeのバージョン・認証の保存先・環境変数を対話時と比較してください。
非対話の自動実行では対話的な再認証が行えないため、エラー発生時のリカバリー手段に注意が必要です。
6. プロキシやネットワーク制限による通信失敗
プロキシ環境、SSL インスペクション、または ANTHROPIC_BASE_URL の設定誤りなどでトークン更新用エンドポイントへ接続できない場合、自動更新は失敗します。
特定のネットワーク環境接続時のみエラーが発生する場合は、ネットワーク経路やプロキシ設定を確認してください。
段階別の対処手順
手順 1:/login の実行
# ターミナルで Claude Code を起動
claude
# プロンプトが出たら
/login
ブラウザが起動したら、画面の指示に従い claude.ai アカウントで認証します。
claude setup-tokenも発行時にはブラウザでの承認が必要なので、完全な無人ジョブの中で発行し直す手順にはできません。
ターミナルに完了メッセージが表示されれば認証完了です。
ブラウザが自動で起動しない場合(SSH 接続先、WSL、ヘッドレス環境など)は、ターミナルに表示された認証用 URL をローカルのブラウザで開き、取得した認証コードをターミナルに入力してください。
手順 2:/logout からの /login
/login だけでは前回の認証情報が残り、再度エラーになるケースがあります。
一度明示的にサインアウトしてから再認証を行います。
/logout
/login
手順 3:認証情報の保存先とアクセス状態を確認する
上の保存先表とCLAUDE_CONFIG_DIRを確認します。
macOSのKeychainへのアクセスはclaude doctorで診断できます。
認証ファイルや設定ディレクトリの一括削除を標準手順にしないでください。
claude doctor
手順 4:公式の手順でログインをやり直す
/logoutを実行し、Claude Codeを閉じてからclaudeを起動して再認証します。
/logoutは保存されたMCPログインやプラグインの秘密情報も消去するため、MCPの再認可やプラグインの秘密情報の再設定が必要になる場合があります。
claude
CI・cron などの自動実行環境における回避策
自動実行環境では対話的なブラウザ認証(/login)を実行できません。
運用の目的に応じて次のいずれかの方法を検討してください。
方法 A:setup-token によるトークンの発行
claude setup-token
1年間有効なOAuthトークンを生成します。
発行だけでは保存されないので、実行環境のCLAUDE_CODE_OAUTH_TOKENへ設定します。
CLAUDE_CODE_OAUTH_TOKENを設定したまま/loginすると、そのセッションは新しいログインへ切り替わりますが、次の起動では環境変数の値が再び読み込まれます。
通常のログインへ戻す場合は、シェルの起動設定やClaude Codeの設定ファイルのenvから不要になった変数の設定を外し、新しく起動したセッションの/statusで認証方式を確認してください。
この方式はモデル要求用で、Remote Controlやclaude.aiコネクタには使えません。
--bareでも読み込まれないため、用途を確認します。
macOS・Linux・WSLの設定例です。
your-tokenは発行した値に置き換えます。
秘密の値を記事やログへ載せないでください。
export CLAUDE_CODE_OAUTH_TOKEN="your-token"
方法 B:API キー認証への切り替え
export ANTHROPIC_API_KEY="sk-ant-..."
OAuth 認証を介さないため、本件のトークン更新エラーを回避できます。
API 利用料金が従量課金となる点や、Web 版サブスクリプション枠が適用されない点を確認した上で選択してください。
APIキーでも期限・権限・残高・通信の問題は起こり得ます。
組織が指定する認証方式と、必要な機能に対応する方式を選びます。
なお、apiKeyHelper スクリプトを設定している場合、Claude Code は 401 や 403 エラーを検知した際にスクリプトを再実行して認証情報を取得し直します。
社内認証基盤などを利用している場合は、この設定を活用することも有効です。
「Failed to refresh OAuth token: another Claude Code process is refreshing it」と出たとき
似た文言で、次のメッセージが出ることもあります。
Failed to refresh OAuth token: another Claude Code process is refreshing it or exited mid-refresh. This is usually transient; retry in a minute, and if it persists close other Claude Code processes or sign in again
こちらは、期限切れの保存済みログインを更新する際に、同じマシンの別プロセスが更新用のロックを保持していて処理が進まない状態です。
別の Claude Code のプロセスがトークンを更新している最中か、更新の途中で終了したときに出ます。
メッセージは、まず1分ほど待って再試行するよう案内しています。
回復しない場合は次の切り分けへ進みます。
何度やっても出る場合は、ほかのターミナルやエディタで動いている Claude Code を閉じてから実行し直します。
それでも直らないときは、/login でサインインし直します。
複数のターミナルで Claude Code を同時に動かしていると、トークンの更新が重なって起きやすくなります。
類似のエラーメッセージ一覧
公式のエラーリファレンスには、/login で解決可能な近縁のメッセージが記載されています。
表示文言が異なる場合でも対応手順が共通しているため、内容に応じて切り分けてください。
| メッセージ | 状態・意味 | 対処 |
|---|---|---|
Not logged in · Please run /login | 未ログイン | /login |
Login expired · Please run /login | セッション期限切れ | /login |
OAuth token refresh failed | 更新失敗 | /login |
OAuth token revoked | トークン失効 | /login |
API Error: 401 ... | 認証情報拒否 | 使用中の認証方式を確認。OAuthなら再ログイン、APIキーならキーと権限を確認 |
This organization has been disabled | 組織アカウント無効 | 管理者に連絡 |
Your account is on hold | アカウント利用制限 | claude.ai/restricted を確認 |
なお、表の下2行のように、/login の再実行では解決しないケースもあります。
組織ポリシーの制限やアカウント停止が原因の場合は、クライアント側の操作では解決できません。
エラー内容に応じた適切な連絡先や窓口へ問い合わせてください。
再発防止のための確認ポイント
- 実行環境の認証方法を確認する:
/statusで使用中の方式を確認し、意図しないAPIキーやOAuth環境変数が優先されていないか調べる。 - 自動実行に合う認証を選ぶ:setup-tokenのOAuth方式とAPIキー方式の機能・料金の違いを確認する。
- ヘルスチェックを仕込む:定期ジョブの先頭で
claude -p "ok"で疎通を確認する方法があります。モデル利用量を消費するため頻度を決め、秘密の値をログへ残さないでください。 - dotfiles 同期の対象から
~/.claude/.credentials.jsonを外す:認証情報の漏えいや更新競合を避け、環境ごとに認証します。
Claude Codeのエラー対処は、ほかにも書いています。



まとめ
- このエラーは「トークンが切れた+自動更新にも失敗した」状態。
- まず
/login、次に/logout→/login、それでも改善しなければ保存先・アクセス状態を確認し、公式手順で再認証。 claude -pだけで失敗する事例は利用者報告にもある。実行環境を比較し、APIキー認証やclaude setup-tokenの適否を判断する。- 組織ポリシー系・アカウント制限系のメッセージは
/loginでは直らない。
見分けてから動く。
関連記事
認証が成功しても作業を継続できない場合は、別の要因によるエラーの可能性があります。
▶ Claudeで「このセッションの環境は削除されました」と出る原因と対処法
参考リンク
- Error reference – Claude Code Docs
- Authentication – Claude Code Docs(保存先とsetup-token)
- Troubleshooting – Claude Code Docs(再認証と診断)
- Issue #79685: Headless
claude -pfails “OAuth session expired and could not be refreshed” - Issue #81937:
claude -pfails while interactive mode works fine
2026年10月26日に公式の認証資料・エラー資料と引用したIssueを再照合しました。
Issueは特定環境の利用者報告であり、現在の全環境で再現することを示すものではありません。
エラーの文言や仕様は変わることがあります。
今後のアップデートにより、エラー文言や動作仕様が変更される可能性があります。
よくある質問:OAuth session expired and could not be refreshed
「OAuth session expired and could not be refreshed」が出たら、まず何をしますか?
ターミナルでClaude Codeを開き、/login で再認証します。
このエラーは、OAuthセッションが期限切れになり、自動更新にも失敗した状態を示します。
改善しない場合は、/logout からの再ログインや認証情報の保存先を確認し、CI・cronだけで起きる場合は、自動実行環境の認証方法を切り分けます。
なぜこのエラーが出るのですか? 主な原因は?
claude.ai アカウント(Pro / Max / Team)で認証して使う場合、認証にはAPIキーではなくOAuthが使われ、トークンの自動更新に失敗すると出ます。
確認候補は保存済みログインの期限、共有認証ストアの競合、アカウント・組織、保存先へのアクセス、実行環境、通信経路です。
エラー文だけで原因を特定することはできません。
再ログインの手順は?
手順1は /login の実行で、ブラウザが起動したら、画面の指示に従って claude.ai アカウントで認証します。
ブラウザが自動で起動しない場合(SSH接続先、WSL、ヘッドレス環境など)は、ターミナルに表示された認証用URLをローカルのブラウザで開き、取得した認証コードをターミナルに入力します。
/login だけでは前回の認証情報が残ってエラーになるケースがあるので、手順2として、一度 /logout でサインアウトしてから /login をやり直します。
認証情報は、どこに保存されていますか?
macOSはKeychain、Windowsは %USERPROFILE%\.claude\.credentials.json、Linux / WSLは ~/.claude/.credentials.json(ファイルモードは0600)です。
macOSもキーチェーンへの書き込みに失敗すると認証ファイルへ退避し、CLAUDE_CONFIG_DIR が設定されていれば、保存先はそのディレクトリです。
macOSのキーチェーンへのアクセスは claude doctor で診断できます。
認証ファイルや設定ディレクトリの一括削除を、標準手順にしないでください。
claude -p や、CI・cronで失敗するときは、どうしますか?
対話モードでは動くのに、claude -p の非対話実行で同じエラーで終了する事例が、公式リポジトリのIssueに複数報告されています。
Issueの利用者報告には認証更新の競合などの仮説があります。
対話実行と自動実行のバージョン・ユーザー・設定・認証方法を比較し、報告と同じ原因だと決めつけないでください。
回避策は2つで、方法Aは setup-token で、1年間有効なOAuthトークンを発行し(発行だけでは保存されないので、実行環境の CLAUDE_CODE_OAUTH_TOKEN へ設定します)、この方式はモデル要求用で、Remote Controlやclaude.aiコネクタには使えません。
方法BはAPIキー認証です。
OAuth更新を使いませんが、別の認証エラーが起こらない保証はありません。
APIの従量課金、組織の許可、必要な機能を確認して選びます。
秘密の値を記事やログに載せないでください。
「Failed to refresh OAuth token: another Claude Code process is refreshing it」とは?
期限切れの保存済みログインを更新する際に、別プロセスが更新用のロックを保持しているか、終了時にロックを残していて処理が進まない状態です。
まず1分ほど待って再試行します。
必ず回復するという意味ではありません。
何度やっても出るときは、ほかのターミナルやエディタで動いている Claude Code を閉じてから、やり直します。
/login で直らないメッセージは、ありますか? 再発を防ぐには?
OAuthの未ログイン・期限切れ・更新失敗では /login が基本です。
ただし、API Error: 401 はAPIキーなど別方式の認証でも起こります。
/statusで使用中の方式を確認して切り分けます。
一方、「This organization has been disabled」(組織アカウント無効)は管理者に連絡し、「Your account is on hold」(アカウント利用制限)は claude.ai/restricted を確認します。
認証ファイルを端末間で同期せず、実行環境と用途に合う認証を選びます。
claude -p "ok"による疎通確認もモデル利用量を消費するため、頻度を決めて実施してください。
ログには認証情報を出さないようにします。
2026年10月26日に公式資料と引用Issueを再照合しました。
各OS・CI環境でのログインや障害の再現、画面操作は今回検証していません。
最新は公式ドキュメントで確認してください。
