楽天セール開催中!ポイント最大11倍!セール会場へ

Claude Code│「OAuth session expired and could not be refreshed」の原因と対処法

Claude Code の利用中に、このエラーメッセージが表示されて終了することがあります。

Failed to authenticate: OAuth session expired and could not be refreshed

Claude Code のデスクトップアプリや Cowork 経由で利用している場合は、次の案内が表示されることがあります。

Claude Code に再度サインインする必要があります。

ターミナルで Claude Code を開き、/login を実行してから、メッセージを再度送信してください。

多くの場合、大半は /login の再実行で解決します。

ただし「/login を実行しても改善しない」「CI や cron の実行時のみ失敗する」といった事例も存在します。

本記事では認証の仕組みを踏まえ、解決しない場合の具体的な対処手順を整理します。

目次

エラーの原因と仕組み

Claude Code を claude.ai アカウント(Pro / Max / Team)で認証して利用する場合、認証方式には API キーではなく OAuth が用いられます。

ブラウザ経由でログインすると、CLI は2種類のトークンをローカル環境へ保存します。

トークン役割有効期限の目安
アクセストークンAPI リクエスト送信時に付与短期(数時間程度)
リフレッシュトークンアクセストークンを自動更新するための情報長期(数週間以上)

通常、アクセストークンの有効期限が切れても、CLI がリフレッシュトークンを用いてバックグラウンドで自動更新します。

公式ドキュメントによると、OAuth トークンはリトライ処理の範囲内で自動更新され、更新に失敗した場合にのみ手動での /login が求められます。

したがって、OAuth session expired and could not be refreshed というエラーは、「期限切れが発生した」だけでなく「自動更新にも失敗した」状態を示しています。

そのため、単なる時間経過以外の要因が影響している可能性があります。

主な原因パターン

1. 長期間未使用による期限切れ

一定期間 Claude Code を使用していなかった場合、保持されているリフレッシュトークン自体の有効期限が切れます。

この場合は /login を再実行してログインし直すことで解決します。

2. 複数環境での再ログインによる競合

同一アカウントを複数の環境(自宅 PC、会社 PC、WSL、Docker コンテナ、VPS など)で利用している場合、一方の環境で再認証すると他方のリフレッシュトークンが無効化されることがあります。

特定のサーバー環境でのみ突然エラーが発生するようになった場合は、他環境でのログイン状況を確認してください。

3. アカウントや所属組織の切り替え

個人アカウントと組織アカウントを切り替えた場合、保存済みトークンのスコープや権限に不整合が生じることがあります。

この状況では、関連するエラーメッセージが表示される場合もあります。

  • signed-in claude.ai account or organization changed on this machine
  • does not meet scope requirement user:profile
  • Claude.ai login was rejected — run /login, then /remote-control

4. 認証情報ストアへのアクセス不備・破損

取得したトークンは OS 固有のセキュアストレージに保存されます。

該当ストレージの破損や読み込み権限の不足が生じていると、トークンの更新処理に失敗します。

OS保存先
macOSキーチェーン(~/Library/Keychains/login.keychain-db)
Windows資格情報マネージャー(DPAPI 暗号化 / %APPDATA%\Microsoft\Credentials\)
Linux / WSLpass、カーネルキーリング、または平文ファイル(フォールバック時)

環境やバージョンによっては、~/.claude/.credentials.json(Windows の場合は %USERPROFILE%\.claude\.credentials.json)に保存される場合もあります。

現在の環境でどの方式が使用されているかを確認してからファイルの退避や削除を行ってください。

主な破損要因には次のようなものがあります。

  • ホームディレクトリを別ユーザー権限(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秒で終了)

報告されている主な要因として、同時並行で動作する対話セッションとのキーチェーン更新競合や、cron / systemd から実行した際にキーチェーンへのアクセス権限や環境変数が継承されない点が挙げられています。

非対話の自動実行では対話的な再認証が行えないため、エラー発生時のリカバリー手段に注意が必要です。

6. プロキシやネットワーク制限による通信失敗

プロキシ環境、SSL インスペクション、または ANTHROPIC_BASE_URL の設定誤りなどでトークン更新用エンドポイントへ接続できない場合、自動更新は失敗します。

特定のネットワーク環境接続時のみエラーが発生する場合は、ネットワーク経路やプロキシ設定を確認してください。

段階別の対処手順

手順 1:/login の実行

# ターミナルで Claude Code を起動
claude

# プロンプトが出たら
/login

ブラウザが起動したら、画面の指示に従い claude.ai アカウントで認証します。

ターミナルに完了メッセージが表示されれば認証完了です。

ブラウザが自動で起動しない場合(SSH 接続先、WSL、ヘッドレス環境など)は、ターミナルに表示された認証用 URL をローカルのブラウザで開き、取得した認証コードをターミナルに入力してください。

手順 2:/logout からの /login

/login だけでは前回の認証情報が残り、再度エラーになるケースがあります。

一度明示的にサインアウトしてから再認証を行います。

/logout
/login

手順 3:認証情報のローカルキャッシュを削除する

改善しない場合は、ローカルに保存されている認証情報を削除してから再度ログインします。

削除作業を行う前に Claude Code のプロセスを完全に終了してください。

# --- macOS ---
# キーチェーンアクセス.app を開き、「Claude Code」関連の項目を検索して削除
# (CLI で消したい場合)
security delete-generic-password -s "Claude Code-credentials"

# --- Linux / WSL ---
rm ~/.claude/.credentials.json

# --- Windows (PowerShell) ---
# 資格情報マネージャー → Windows 資格情報 → Claude 関連のエントリを削除
# ファイル方式で保存されている場合は
Remove-Item "$env:USERPROFILE\.claude\.credentials.json"

認証ファイルの削除後に claude を実行すると、初期の認証フローが開始されます。

手順 4:設定ファイルを初期化して再構築する

設定ファイルの不整合が疑われる場合は、既存ファイルのバックアップを取得した上で ~/.claude/config.json や ~/.claude/settings.json を退避させてください。

プロジェクト設定や CLAUDE.md を誤って削除しないよう、ディレクトリ全体を削除するのではなく、rm -rf ~/.claude 対象の設定ファイルのみを個別に退避または削除してください。

cp ~/.claude/config.json ~/.claude/config.json.bak
mv ~/.claude/config.json /tmp/

CI・cron などの自動実行環境における回避策

自動実行環境では対話的なブラウザ認証(/login)を実行できません。

運用の目的に応じて次のいずれかの方法を検討してください。

方法 A:setup-token によるトークンの発行

claude setup-token

非対話実行用のトークンを生成するコマンドです。

ただし Issue 上では一部の claude.ai 連携機能が制限される旨が報告されているため、すべての用途に対応できるわけではない点に留意が必要です。

必要な機能要件を確認した上で適用してください。

方法 B:API キー認証への切り替え

export ANTHROPIC_API_KEY="sk-ant-..."

OAuth 認証を介さないため、本件のトークン更新エラーを回避できます。

API 利用料金が従量課金となる点や、Web 版サブスクリプション枠が適用されない点を確認した上で選択してください。

無人実行ジョブを安定して運用する場合、現時点では最も確実な構成です。

なお、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 ...認証情報拒否/login
This organization has been disabled組織アカウント無効管理者に連絡
Your account is on holdアカウント利用制限claude.ai/restricted を確認

なお、表の下2行のように、/login の再実行では解決しないケースもあります。

組織ポリシーの制限やアカウント停止が原因の場合は、クライアント側の操作では解決できません。

エラー内容に応じた適切な連絡先や窓口へ問い合わせてください。

再発防止のための確認ポイント

  • マシンごとに用途を固定する:同一アカウントを複数マシンで頻繁に往復させない。
    サーバー側は API キーに寄せる。
  • 無人実行は API キーで:cron / CI / GitHub Actions で OAuth を使わない。
  • ヘルスチェックを仕込む:定期ジョブの先頭で claude -p "ok" を叩いて、失敗したら通知するだけでも「気づいたら数日止まっていた」を防げます。
  • dotfiles 同期の対象から ~/.claude/.credentials.json を外す:マシン間でトークンを共有すると相互に無効化し合います。

Claude Codeのエラー対処は、ほかにも書いています。

まとめ

  1. このエラーは「トークンが切れた+自動更新にも失敗した」状態。
  2. まず /login、次に /logout → /login、それでもダメなら認証情報を削除して再ログイン。
  3. claude -p や cron でだけ落ちるのは既知の Issue。
    API キー認証か claude setup-token で回避する。
  4. 組織ポリシー系・アカウント制限系のメッセージは /login では直らない。
    見分けてから動く。

関連記事

認証が成功しても作業を継続できない場合は、別の要因によるエラーの可能性があります。

▶ Claudeで「このセッションの環境は削除されました」と出る原因と対処法

参考リンク

本記事は2026年9月6日に、公式ドキュメントのエラーリファレンスと、引用しているGitHub Issueの内容を確認して書いています。

エラーの文言や仕様は変わることがあります。

今後のアップデートにより、エラー文言や動作仕様が変更される可能性があります。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

次に学ぶ・作業環境を選ぶ

学習を続けたい方や、作業環境を整えたい方は、目的に合うガイドをご覧ください。

生成AIのおすすめ書籍

周辺機器の優先度

目次