接続・認証エラー

「Login expired」「OAuth token expired」の直し方

Claude Codeで「Login expired · Please run /login」や「OAuth token has expired」が出た時の意味と直し方を、公式ドキュメントで確認できる範囲で整理します。

公的機関・公式資料などの一次情報と照合して作成しています。このサイトについて

Login expired とは

Claude Code を claude.ai のアカウント(Pro、Max、Team、Enterprise)でログインして使うと、ログイン情報が手元のパソコンに保存されます。この情報は OAuth(パスワードを渡さずに、ブラウザ経由でアプリにログインを許す仕組み)で作られたもので、期限があります。通常は Claude Code が裏で自動的に更新(リフレッシュ)します。

その更新に失敗し、OAuth のサービスが保存済みの更新用トークンを拒否すると、Claude Code は保存していたログイン情報を消します。そのあとは、モデルへのリクエストを送る前に Claude Code 自身が止めて、次のように表示します。

Login expired · Please run /login

つまり、これは通信の失敗ではなく、サインインし直すようにという案内です。新しいログイン情報を作れるのは /login だけなので、公式によると、サインインせずにリトライしても毎回同じ表示になります。

似たメッセージに「OAuth token revoked」や「OAuth token has expired」があります。こちらは API が返した拒否を表示するもので、意味が少し違います。一般的なログインの不具合の全体像は、ログインできない時の対処で扱っています。

基本(メッセージの種類と意味)

公式のエラー一覧(Authentication errors)で確認できた内容を、表にまとめます。

← 横にスクロールできます →

画面の文言 意味 対処
Login expired · Please run /login 保存したログインの更新に失敗し、保存情報が消えた。Claude Code 自身がリクエストを止めている /login で再サインイン
OAuth token revoked · Please run /login トークンが取り消された(あらゆる場所からのサインアウトや、管理者によるアクセスの削除) /login で再サインイン
Please run /login · API Error: 401 OAuth token has expired … 自動更新が途中で失敗し、API が期限切れと返した。CLAUDE_CODE_OAUTH_TOKEN の長期トークンの期限切れ・取り消しでも同じ文言になる /login で再サインイン
Not logged in · Please run /login 有効な認証情報がそもそもない /login、または環境変数の確認

ほかに押さえておきたい点です。

  • 非対話モード(-p)や Agent SDK では、文言が Failed to authenticate: OAuth session expired and could not be refreshed になります。エラーコードは authentication_failed です。
  • API キー、CLAUDE_CODE_OAUTH_TOKEN、サードパーティのプロバイダーで認証しているセッションは、保存済みのログインを使わないので、Login expired は出ません。
  • アカウント自体が停止されているために更新が失敗した場合は、Login expired ではなく「Your account is on hold」が表示されます。公式によると、v2.1.235 より前はこの場合も Login expired と表示されていました(2026年10月に確認)。

具体例(画面の表示と /status の確認)

期限の前の警告

保存したログインの期限が 3 日以内になると、起動時に次の警告が出ます。

Your login expires in 3 days · run /login to renew

公式によると、この警告は案内のみで、実際に期限が切れるまでリクエストは止まりません。ただし、バックグラウンドセッションや Remote Control のセッションは、期限が切れると進まなくなり、サインインし直すまで回復しません。

失敗する前に状態を見る

保存したログインが更新できない状態だと、/status の Login の行に次のように出ます。

Expired — log in again

この行は、保存した claude.ai のログインが使用中の認証情報のときだけ出ます。v2.1.210 以降が必要です(2026年10月に確認)。

Login expired の実践ステップ

  1. 表示された文言が、上の表のどれに当たるかを見分ける。
  2. Claude Code のプロンプトで /login を実行し、ブラウザでサインインを完了する。ブラウザが開かない、戻れない場合は、ブラウザが開かない時の対処を見てください。
  3. /status を実行し、どの認証情報が使われているかを確認する。Login の行に Expired — log in again が出ていないこと、予期しない API key の行や Auth token の行がないことを見ます。
  4. -p コマンドや Agent SDK のプログラムで保存済みのログインを使っている場合は、同じ環境で claude を起動して /login を終えてから、コマンドを再実行する。
  5. 何度も同じ表示になるなら、公式の「Reset your login」の手順を試す。/logout で完全にサインアウトし、Claude Code を閉じ、claude で起動し直して認証をやり直します。
  6. それでも頻繁に起きるなら、システムの時計が正確かを確認する。公式によると、トークンの検証は正しい時刻に依存します。
  7. 自動化(CI など)で対話的にサインインできない場合は、ANTHROPIC_API_KEY で認証するか、claude setup-token で長期トークンを作る方法があります。

Login expired の注意点

  • 環境変数 CLAUDE_CODE_OAUTH_TOKEN で認証している場合(/status の Auth token の行に表示)、401 のあとも Claude Code はその値を送り続けます。claude setup-token で新しいトークンを作って再起動するか、変数を解除して /login を行います。
  • claude setup-token で作るのは、1 年有効な OAuth トークンです。Pro、Max、Team、Enterprise のプランが必要で、トークンはどこにも保存されないため、自分でコピーして環境変数に設定します。
  • 同じ設定ディレクトリを使う別のウィンドウで claude.ai にサインインすると、「Not logged in」を表示中の対話セッションは、再起動なしでそのログインを使い始めます(macOS の v2.1.286 より前は再起動が必要)。
  • 複数のセッションを同時に開いている場合、更新は 1 つのプロセスだけが行います。そのため「Could not refresh your login because another Claude Code process is refreshing it」と出ることがあります。ログインの拒否ではなく、公式は 1 分ほど待って再試行し、続けば他の Claude Code を閉じ、それでも出るなら /login を行うよう案内しています。
  • 「API Error: 401 Invalid authentication credentials」は期限切れではなく、資格情報の取り消しや、組織・アカウントの無効化などで出ます。先に /status で使用中の認証情報を確かめます。
  • 契約状態や組織の設定が原因と思われる場合は、断定せず、組織の管理者または公式サポートに確認してください。

Login expired でよくあるミス

  • 表示のまま何度もリトライして、時間を使う。Login expired は、サインインし直すまで毎回同じ結果になります。
  • /login をしたのに直らず、環境変数 ANTHROPIC_API_KEY が残っていることに気づかない。公式の優先順位では、承認済みの ANTHROPIC_API_KEY は /login のログインより優先され、/login では置き換わりません。
  • /logout の影響を忘れる。公式によると、/logout は保存した MCP サーバーのログインなども消すため、あとで再認可が必要になります。

Login expired のチェックリスト

  • 表示された文言は、Login expired、OAuth token revoked、401 のどれか確認した。
  • /status で、有効な認証情報が想定どおりか確認した。
  • ANTHROPIC_API_KEY や CLAUDE_CODE_OAUTH_TOKEN が意図せず残っていないか確認した。
  • 繰り返す場合は、/logout から再サインインを試し、システムの時計も確認した。
  • 組織のアカウントで直らないときは、管理者に連絡する準備をした。

Login expired のFAQ(よくある質問)

Q. Login expired と「Not logged in」は同じですか。
A. 違います。「Not logged in」は、有効な認証情報がそもそもない状態です。Login expired は、保存していたログインの更新に失敗して、保存情報が消えた状態です。どちらも /login が入口ですが、公式は区別して説明しています。

Q. ログインの期限はどのくらいで、何日おきにログインし直す必要がありますか。
A. 公式には、期限の日数や固定の間隔は記載が確認できませんでした。確認できたのは、期限が 3 日以内になると起動時に警告が出ることと、更新できなくなったときに Login expired が出ることです。

Q. 前は直ったのに、またすぐ出ます。
A. 頻繁に起きる場合は、まずシステムの時計を確認します。macOS では、公式の「Not logged in or token expired」の項に、claude doctor でキーチェーン(macOS の資格情報の保管場所)に書き込めるかを確かめ、書き込めない場合に復旧する手順が載っています。claude doctor については claude doctor の使い方を見てください。

筆者の見解(Login expired)

私見では、このエラーで初心者がいちばん遠回りするのは、「期限切れ」という言葉に引っぱられて、表示の種類を見分けないまま /login を繰り返すことだと考えます。Login expired なら一度のサインインで片づくことが多い一方、401 の文言や環境変数のトークン・API キーが絡む場合は、/login を何度しても同じ結果になりえます。そこで筆者は、サインインし直す前に一度だけ /status を開き、使われている認証情報が想定どおりかを見ることをおすすめします。直す相手がログインなのか、環境変数なのか、組織やアカウントの側なのかが、ここで分かれるからです。

もう一つ、起動時の「あと3日」の警告は軽く流さないほうがよいと考えます。席を外している間に動かすセッションは、切れた時点で止まるからです。長い作業を任せる前に警告が出ていたら、先に更新しておくのが安全です。自動化の長期トークンにも期限があるので、更新の段取りは最初に決めておくことをおすすめします。また、思いつきで /logout を重ねるのは、MCP サーバーの再認可など余計な作業を増やすので避けたほうがよい、というのが筆者の考えです。

Login expired の関連項目

出典(一次情報)

本記事は一般的な情報の提供を目的としています。Claude Code の料金・利用上限・機能・エラーメッセージ・コマンドは頻繁に更新されるため、最新の内容は Anthropic の公式ドキュメントとお使いのバージョンで必ずご確認ください。契約・請求・セキュリティに関する判断は、公式サポートや社内の担当部門にご相談ください。「筆者の見解」は一つの考え方です。