Claude Codeで何度もログインを求められる原因と対処法
Claude Codeが1日に何度も/loginを求めてくる原因は、複数セッションが同じ認証情報を共有し、OAuthリフレッシュトークンの更新が競合することです。
Claude Codeが1日に何度も/loginを要求してくる場合、大半は同じ認証情報を複数セッションが同時に使っていることが原因です。OAuthのリフレッシュトークンは1回使うと無効になる仕組みのため、並行して開いた別のセッションが更新済みのトークンを知らないまま古いトークンを提示すると、そこだけ弾かれて再ログインを迫られます。単一セッションでも頻発する場合は、システム時刻のズレやKeychainへの書き込み失敗など、別の原因を疑う必要があります。
この不具合はGitHub Issue #1757で2025年6月から報告が続き、後継のIssue #24317でOAuthリフレッシュトークンの競合という機構が提示されました。#24317は2026年2月に立てられ、5月にクローズされましたが、その後も9月まで再現報告が付き続けています。以下では原因の切り分け方と、changelogに残る修正の変遷、報告されている再発パターン、手元で状態を確かめる方法をまとめます。
何度も再ログインを求められる主な原因
症状のパターンから、原因はおおむね次の4つに切り分けられます。
| 症状のパターン | 主な原因 |
|---|---|
| 複数のターミナル・VS Codeウィンドウを同時に開いている | 主な原因OAuthリフレッシュトークンの競合(最多パターン) |
| SSH経由やスリープ復帰直後に発生する | 主な原因システム時刻のズレ、macOS Keychainの書き込み失敗 |
| 数日〜数週間おきに1回だけ発生する | 主な原因保存済みログイン自体の期限切れ(通常の想定内動作) |
| 単一セッションでも毎日のように発生する | 主な原因インストール経路の混在、シェルに残った環境変数など個別要因 |
保存されているのはアクセストークンとリフレッシュトークンの2つです。Issue #24317の報告者による調査では、アクセストークンの有効期限は8〜15時間程度(報告により異なります)、リフレッシュトークンは1回使うと失効する使い捨て方式とされています。複数セッションを並行運用するユーザーほど、この2種類のトークンの更新タイミングが衝突しやすくなります。
期限切れと競合は出る画面で見分ける
保存済みログインそのものの期限切れは、競合とは別の話です。/loginで作成したログインの期限が3日以内に迫ると、起動時にYour login expires in 3 days · run /login to renewという警告が出ます。この警告は情報表示だけで、リクエストはブロックされません。警告はv2.1.203で追加され、v2.1.217で期限の5日前から3日前に変わりました。
期限が切れて更新もできなくなると、モデルへのリクエストがLogin expired · Please run /loginで止まります。更新に使うリフレッシュトークンがOAuthサービスに拒否され、保存済みの認証情報が消去された状態です。
再ログイン要求の2つの型
想定内の期限切れ
起動時に期限3日前の警告が出て、期限後はLogin expiredで止まります。/loginで更新すれば済み、頻度は期限の周期に従います。
リフレッシュの競合
警告なしに、並行セッションの片方だけが突然ログイン画面へ送られます。もう一方のセッションが先にトークンを更新したことが原因です。
2025年から続く報告の広がり
Issue #1757は2025年6月に立てられ、以降も断続的にコメントが付いています。OSやインストール方法がまちまちな報告が並存していたため、当初は単一の原因に絞り込めませんでした。後にIssue #24317で並行セッション競合という機構が示されましたが、これだけで全報告を説明できるとは限りません。次の節で見るように、競合以外の経路もchangelogに別項目として残っています。
OAuthリフレッシュトークンが競合する仕組み
Issue #24317に投稿された分析では、次の流れで競合が起きると説明されています。
トークン更新が衝突する5段階
- 1
セッションA・Bが同じトークンを読み込む
複数のClaude Codeプロセスが、起動時に同じリフレッシュトークンをメモリへ読み込みます。
- 2
Aが先に更新する
Aのアクセストークンが先に期限切れになり、リフレッシュトークンで新しいトークンペアを取得します。
- 3
古いトークンが無効になる
サーバー側は古いリフレッシュトークンをその時点で無効化し、
~/.claude/.credentials.jsonには新しいトークンが書き込まれます。 - 4
Bが古いトークンを出す
Bのアクセストークンも期限切れになり、メモリに残ったままの古いリフレッシュトークンを提示します。
- 5
Bだけ再ログインを求められる
使用済みのトークンは拒否され、Bはブラウザーでの再ログインに進みます。
並行して開くセッション数が増えるほど、この衝突が起きる確率も上がります。公式のトラブルシューティングも、同じマシンの並行セッションは保存済みのログインを共有し、更新は1プロセスずつ行うよう調整される、と説明しています。
バージョン別に見る対策の変遷
changelogをOAuthやtokenで追うと、この系統の不具合への対応が複数のバージョンに分かれて入っています。
| バージョン | 修正内容 |
|---|---|
| v2.1.0 | 修正内容並行したトークン更新の最中に、Keychainキャッシュから古いOAuthトークンを読む競合状態を修正 |
| v2.1.44 | 修正内容認証のリフレッシュ処理に起因するエラーを修正 |
| v2.1.81 | 修正内容複数の並行セッションで、一方がOAuthトークンを更新すると他方が繰り返し再認証を求められる不具合を修正 |
| v2.1.129 | 修正内容スリープ復帰後のOAuth更新の競合で、実行中の全セッションがログアウトされうる不具合を修正 |
| v2.1.211 | 修正内容スリープ復帰後に、並列セッションが共有の認証情報ごと同時にログアウトする不具合を修正 |
| v2.1.248 | 修正内容別プロセスがトークン更新のロックを保持している間にログイン画面へ送られる不具合を修正。以後はリトライ可能なエラーとして扱われる |
| v2.1.277 | 修正内容古いビルド(IDE拡張が同梱するCLIなど)が現行版と同じマシンで動くと、予期せずログアウトされる不具合を修正 |
| v2.1.281 | 修正内容macOSでログインKeychainがロックされている間(スリープ復帰直後など)に、認証情報の書き込みでMCPのOAuthトークンが消えたりKeychainエントリが削除されたりする不具合を修正 |
| v2.1.286 | 修正内容古い~/.claude/.credentials.jsonが残るmacOSで、別のウィンドウの/loginが成功してもNot logged inやLogin expiredが表示され続ける不具合を修正 |
v2.1.129とv2.1.211は、どちらもスリープ復帰が引き金です。公式のトラブルシューティングによると、v2.1.211より前はスリープ復帰後に2つのセッションが同じトークンで更新を行うことがありました。その結果、保存済みログインが失効し、開いている全セッションが一斉にログインを求めました。
v2.1.248は、ロックを取れなかったときの扱いを変えました。即座にログイン画面へ送らず、再試行できるエラーとして返します。v2.1.277は性質が異なり、競合ではなくバージョンの混在が原因です。v2.1.277より前は、VS Code拡張が同梱する古いCLIが同じマシンで動くだけで、新しい版のセッションがログアウトされることがありました。
並行数が多いと今も再発する場合がある
Issue #24317には、v2.1.81の修正の前後を通じて、再発の報告が寄せられています。報告ごとに環境が違うので、条件別に並べます。
| 報告時期 | 環境 | 報告内容 |
|---|---|---|
| 2026年2月末 | 環境Windows 11、v2.1.62、VS Codeウィンドウ最大8つ | 報告内容新しいウィンドウでClaude Codeを起動するたびにブラウザーのログインが出る |
| 2026年3月初旬 | 環境macOS、v2.1.63、Remote Controlで2〜3セッション | 報告内容1日に複数回ログアウトされ、再ログイン直後に外れることもある |
| 2026年3月下旬 | 環境macOS、v2.1.81、claude -pを10並列×80回 | 報告内容約60回の呼び出し後に拡張側がログアウトされる |
| 2026年4月 | 環境macOS、v2.1.97、複数ペインのマルチプレクサー | 報告内容ロックの再試行が5回・約7.5秒では、3並行を超えると足りないという指摘 |
| 2026年9月 | 環境Windows、v2.1.258 | 報告内容認証情報が平文ファイルに保存される環境で、同じ競合が続くという報告 |
4月には、Linuxで2プロセスを動かした環境の観察も投稿されています。~/.claude/.credentials.jsonが854バイトから472バイトへ書き換わり、refreshTokenが欠けた状態になったそうです。数分後には完全な再ログインが必要になりました。各プロセスが起動時の認証情報を手元に持ち、古い内容でファイルを上書きしたと報告者は推測しています。これは1人の観察で、公式に確認された仕様ではありません。
並行数が少なくても再発した報告(Linux、v2.1.114、2プロセス)があるため、セッション数だけで安全とは言えません。エディタのバックグラウンドから多数のclaude -pを起動するような使い方は、報告の多い再発パターンです。
手元の認証状態を確認する
Claude Code v2.1.287で、認証まわりのサブコマンドを確認しました。claude authの下にはlogin・logout・statusの3つがあります。
claude auth --helpCommands:
help [command] display help for command
login [options] Sign in to your Anthropic account
logout Log out from your Anthropic account
status [options] Show authentication statusclaude auth statusの出力は既定でJSONです。人が読むなら--textを付けます。ログイン中に実行すると、次のようなキーが返りました(メールアドレスや組織IDは伏せています)。
{
"loggedIn": true,
"authMethod": "claude.ai",
"apiProvider": "firstParty",
"configDirectory": "~/.claude",
"subscriptionType": "max"
}authMethodとapiProviderを見れば、claude.aiのログインで動いているのか、別の認証経路かが分かります。configDirectoryは、どのディレクトリの認証情報を読んでいるかの確認に使えます。セッション内の/statusにも、v2.1.210以降はLoginの行が出ます。期限が切れた状態ではExpired — log in againと表示され、保存済みの組織とメールアドレスも併記されます。この行は、保存済みのclaude.aiログインが有効な認証になっているときだけ出ます。
アカウントを使い分けている場合は、CLAUDE_CONFIG_DIRの設定も確認します。公式ドキュメントによると、設定ディレクトリごとにclaude.aiのログインが別々に保存され、macOSのKeychainエントリもディレクトリごとに別です。別のディレクトリで起動したセッションは、別の認証情報を読みます。
今すぐ試せる対処法
まず現在の認証状態を確認します。
/status期限切れなら、/loginで再認証します。
/loginその上で、以下を順に確認します。
- Claude Codeを最新版に更新する。OAuthリフレッシュの競合対策は、v2.1.81からv2.1.286まで複数のバージョンに分かれて入っています。古いままだと、解消済みの不具合を踏み続けます。
claude update- IDE拡張が古いCLIを同梱していないか確認する。ターミナルの
claude --versionが新しくても、拡張側が別のビルドを使っていることがあります。 - 並行して開いているセッション数を確認する。タブやウィンドウを多数開いている場合、一時的に減らして症状が止まるか見ます。
- システムクロックが正しいか確認する。公式のトラブルシューティングは、頻発する場合は時刻の正確さを確認するよう案内しています。トークンの検証は正しいタイムスタンプに依存します。
- SSH経由でmacOSを使っている場合はKeychainの状態を確認する。Keychainが書き込みを拒否すると、認証情報は平文の
~/.claude/.credentials.jsonへ保存されます。ロックされたKeychainのほか、Keychainのパスワードがアカウントのパスワードとずれている場合も同じです。macOS 26で成功表示のあとも保存されない報告は、macOS 26で/loginが成功してもトークンが保存されない症状にまとめています。
CIやバッチで多数のプロセスを並列起動する場合は、claude setup-tokenで長期トークンを発行し、CLAUDE_CODE_OAUTH_TOKENに渡す方法があります。公式ドキュメントはCIやスクリプト向けとして案内しています。発行されるのは有効期間1年のOAuthトークンで、Pro・Max・Team・Enterpriseのいずれかのプランが前提です。コマンドの説明はSet up a long-lived authentication token (requires Claude subscription)です。トークンは画面に表示されるだけで、どこにも保存されません。各プロセスが個別にトークンを持てるため、/loginの共有認証情報を奪い合う構図を避けられます。
注意点が3つあります。--bareを付けた呼び出しはこの変数を読まないので、ANTHROPIC_API_KEYかapiKeyHelperで認証します。Remote Controlの確立やclaude.aiコネクタの取得はできません。さらに#24317には、2026年2月のサーバー側の変更以降、この回避策が使えなくなったという、参加者の1人のコメントもあります。公式ドキュメントの現行の説明と食い違うため、手元で動くかどうかは実際に試す必要があります。3方式の使い分けはClaudeログイン方法3種の使い分けにあります。
claude setup-token表示されたメッセージが特定の文言に該当する場合は、それぞれ専用の記事で対処を扱っています。OAuth token revokedやOAuth token has expiredが出ている場合は「OAuth token revoked」の対処、claude.aiコネクタ利用中にrejected the session tokenが出ている場合は「rejected the session token」エラーの対処を確認してください。ANTHROPIC_PROFILE経由で認証していてAnthropic profile login expiredが出る場合は/loginでは直らないことがあり、「Anthropic profile login expired」の対処法で見分け方を扱っています。/loginのたびに認可画面とサインイン画面を行き来して完了しない場合は、競合とは別の不具合で、Claude Codeでログインがループする問題にまとまっています。サインイン用メールの到着が遅れて期限切れになる場合は、Claudeのログイン用メールが届かない・遅いときの原因と対処法が参考になります。
まとめ
複数セッションの並行運用が多い人は、まずバージョンの更新とIDE拡張側のCLIの確認から始めると原因を絞れます。単一セッションで症状が出るなら、/statusの表示と時刻・Keychainの状態を見ます。大量の並列起動が前提の用途では、更新だけで再発が消えるとは限らないため、プロセスごとの認証分離を試す価値があります。
CLIではなくClaude Desktopアプリで再ログインを繰り返す場合は、リフレッシュトークンの競合とは別の、サーバー側のセッション失効が原因のことがあります。