Claude Code で、急にこんなメッセージが出てログインを求められたことはないだろうか:

Not logged in · Please run /login
Invalid API key · Fix external API key
OAuth token has expired · Please run /login
API Error: 400 ... This organization has been disabled.

これらは 「認証(あなたが誰か)の確認に失敗した」系のエラーだ。多くは 401/403 として現れる。厄介なのは、「課金しているのに弾かれる」「昨日まで使えたのに急にログインを求められる」といった、一見不可解な出方をすること。だが 原因の大半は典型的で、切り分けの順番さえ分かれば短時間で直る

先に最重要ポイント。① 認証トラブルで一番多いのは「環境変数 ANTHROPIC_API_KEY がサブスク(Pro/Max)ログインを“黙って上書き”していること」——これが 予期せぬ従量課金・「organization disabled」・「Invalid API key」の正体になりやすい。② まず /status で「今どの資格情報で動いているか」を見るのが全ての出発点。③ 迷ったら「不要なキーを unset/logout/loginでクリーンに入り直す。

CLAUDE CODE · AUTH PRECEDENCE

資格情報には「優先順位」がある

— 上にあるものが勝つ。だから環境変数のAPIキーがサブスクを上書きする

1 Cloud(Bedrock/Vertex/Foundry)
2 ANTHROPIC_AUTH_TOKEN(ゲートウェイ用)
3 ANTHROPIC_API_KEY ← 環境変数 これが勝つ=従量課金に
4 apiKeyHelper / 5. CLAUDE_CODE_OAUTH_TOKEN
6 サブスク OAuth(/login 本当はこれを使いたい

ANTHROPIC_API_KEY が環境に残っていると、サブスクより優先されてしまう。
まず /status で確認 → 不要なら unset ANTHROPIC_API_KEY

1. このエラーは何を言っているのか

認証(authentication)とは 「あなたが誰であるかを証明する」こと。Claude Code は、サブスクのOAuthログインAPIキークラウド資格情報のいずれかで「あなた」を証明する。この証明に失敗すると、401(authentication_error)403(forbidden)として弾かれる。代表的な文言と意味はこうだ。

メッセージ意味
Not logged in · Please run /login有効な資格情報が無い → /login
Invalid API key · Fix external API key(旧版では「· Please run /login」表示も)環境変数や apiKeyHelper のキーがAPIに拒否された
This organization has been disabled無効化された組織の古いAPIキーが上書きしている
OAuth token revoked / has expired · Please run /login他所でログアウト/管理者が無効化/自動更新の失敗
API Error: 403 ... forbidden ... Request not allowedサブスク失効・Consoleロール不足・プロキシ干渉

重要なのは 「自分を責める前に、まず /status で“今どの資格情報で動いているか”を確認する」こと。認証エラーの多くは、意図しない資格情報が選ばれていることに起因する。その筆頭が次章の「APIキーによる上書き」だ。

2. 最大の罠——APIキーがサブスクを上書きする

公式ドキュメントは、Claude Code が 複数の資格情報の中から1つを「優先順位」で選ぶと明記している(冒頭ヒーロー参照)。問題は、環境変数 ANTHROPIC_API_KEY が、サブスク(Pro/Max)ログインより上位にあること。つまり——

公式の説明(要旨)

有効なサブスクがあっても、環境に ANTHROPIC_API_KEY があれば(承認後)そちらが優先される。そのキーが無効・期限切れの組織のものだと認証に失敗する。unset ANTHROPIC_API_KEY でサブスクに戻し、/status でどちらが有効か確認すること」。

この上書きが、3つの“不可解な症状”を生む。① 予期せぬ従量課金——サブスク定額のはずが、APIキー経由でトークン従量で課金される(高額請求の報告例もある)。② This organization has been disabled——残っていたキーが無効化された古い組織のものだった。③ Invalid API key——キーが失効・誤り。いずれも 「あなたのログインの問題」ではなく「余計なキーが居座っている問題」だ。

キーはどこから来るのか~/.zshrc~/.bashrc~/.profileexport ANTHROPIC_API_KEY=...、direnv や dotenv、IDEのターミナルが読む .env、前職・別プロジェクトの残骸、CI環境。Windows なら PowerShell プロファイル($PROFILE)やユーザー環境変数。検出は /statusenv | grep ANTHROPIC修正は

# 一時的に外して起動
unset ANTHROPIC_API_KEY
claude

# 恒久対策:シェル設定や .env から export 行を削除し、/status で確認

なお対話モードでは 初回にキーの使用可否を一度尋ねられ、選択が記憶される(後から変えるには /config の「Use custom API key」トグル)。意図的にAPIキーで使いたいのでなければ、サブスクを使うよう /status で必ず確認しよう。

3. その他の原因

上書き以外の認証トラブルも、原因はだいたい決まっている。

OTHER CAUSES

上書き以外の認証つまづき

トークン失効・無効化
他所でログアウト/管理者が無効化/自動更新の失敗。/logout/login で入り直す。
システム時計のずれ
トークン検証は正確な時刻に依存。毎回ログインを求められるなら時計を合わせる
macOS キーチェーン
キーチェーンがロック/パスワード不一致だと資格情報を保存できない。claude doctor で点検。
Consoleロール不足(403)
APIキー利用なら、Consoleで「Claude Code」/「Developer」ロールとサブスク有効を確認。
WSL/SSH/コンテナのOAuth
ブラウザのリダイレクトがローカルに戻れない。表示されるコードを貼り付けc でURLコピー、BROWSER 設定も。
組織ポリシー
「subscription access / API key authentication を無効化」はサーバ側設定で、ローカルでは上書き不可。管理者対応。

「毎回ログインを求められる」は時計ずれ or キーチェーンを、
「403で弾かれる」はサブスク失効・Consoleロール・プロキシをまず疑う。

認証情報の保存場所も知っておくと復旧が速い。macOS は KeychainLinux は ~/.claude/.credentials.json(権限0600)Windows は %USERPROFILE%\.claude\.credentials.json。通常は /login/logout が管理するが、壊れた場合はこのファイルを削除してクリーン認証する手もある(上級者向け)。

4. 切り分けワークフロー

認証で詰まったら、上から順に。ほとんどはステップ3までで解決する。

DIAGNOSE

上から順に切り分ける

1
/status今どの資格情報が有効かを確認(サブスクか、APIキーか、クラウドか)。
2
env | grep ANTHROPIC(Windowsは $PROFILE・ユーザー環境変数)で余計なキーを探す
3
unset ANTHROPIC_API_KEY → 再起動。シェル設定・.env から export 行を削除して恒久化。
4
それでもダメなら /logout → Claude Code を閉じる → /login でクリーン認証。
5
時計を合わせる/macOSは claude doctor でキーチェーン点検/組織ならConsoleロール確認。

鉄則:「まず /status、次に余計なキー狩り」
大半は「上書きしていたキーを外す」だけで直る。

5. 紛らわしいエラーとの区別

「弾かれた/止まった」は、認証以外の原因のこともある。HTTPコードで切り分けるのが確実だ。

症状正体主な対処
401 / 403・Invalid API key・Not logged in本記事=認証(資格情報の問題)/status → 余計なキーを外す → /login
usage limit reachedプラン枠の使い切り(認証は正常)リセット待ち・対処
429 Request rejectedレート制限(※低Tierのキーに上書きされ429になることも)流量を落とす。/status でキー混入も確認
529 / 500サーバ側の過負荷・内部エラー待って再試行・対処
Credit balance is too lowConsoleのプリペイド残高切れ(請求 or サブスク切替)残高チャージ、または /login でサブスクへ

覚え方:401/403 は「あなたが誰か」の問題=認証usage limit と Credit balance は「量/残高」の問題429 はレート529/500 はサーバ側。とくに 余計なAPIキーは「認証失敗」だけでなく「予期せぬ課金」「低Tierでの429」まで引き起こすので、困ったらまず /status なのだ。その他の頻出エラーは エラー集にまとまっている。

6. 再発防止チェックリスト

認証で繰り返しハマらないためのチェックリスト。

サブスクで使うなら、シェル設定・.envANTHROPIC_API_KEY を残さない(前職/別案件の残骸に注意)。 重要作業の前に /status有効な資格情報を確認する習慣。 CI で使うなら、対話ログインではなく claude setup-tokenCLAUDE_CODE_OAUTH_TOKEN(または明示的にAPIキー)を使う。 「毎回ログイン」が起きるならシステム時計とmacOSキーチェーンを点検。 組織アカウントはConsoleロールとプラン状態を確認。 WSL/SSHではコード貼り付け方式を覚えておく。

まとめ

Claude Code の 認証・ログインエラー(Not logged in/Invalid API key/organization disabled/OAuth token expired 等)は、多くが 401/403=資格情報の問題だ。そして最頻出の真因は 「環境変数 ANTHROPIC_API_KEY がサブスクログインを黙って上書きしている」こと——これが予期せぬ従量課金・organization disabled・Invalid API keyを生む。だから出発点は常に /status で“今どの資格情報か”を確認することだ。

切り分けは /status → ② env | grep ANTHROPIC で余計なキー探し → ③ unset+シェル設定から削除 → ④ /logout/login → ⑤ 時計・キーチェーン・Consoleロール。大半は「上書きしていたキーを外す」だけで直る。401/403=認証、usage limit/Credit=量・残高、429=レート、529/500=サーバと切り分ければ、的外れな対処を避けられる。関連:使用量制限529/500エラーClaude Codeエラー集

FAQ

Q. 課金しているのに「Invalid API key」や「organization has been disabled」が出ます。なぜ?
A. ほぼ確実に、環境変数 ANTHROPIC_API_KEY がサブスクログインを上書きしています。そのキーが失効・無効化された組織のものだと、サブスクが有効でも弾かれます。env | grep ANTHROPIC で探し、unset ANTHROPIC_API_KEY してから /login/status でサブスクが有効か確認してください。シェル設定(.zshrc 等)や .envexport 行も削除を。

Q. サブスク定額のはずなのに、従量で課金されていました。
A. これも ANTHROPIC_API_KEY の上書きが典型的な原因です。APIキーが優先されると、定額のサブスクではなくトークン従量のAPI課金に流れます。/status で「サブスクが有効」と表示されているかを確認し、APIキーが選ばれているなら unset+設定削除で外してください。意図的にAPIキーを使う場合のみ残します。

Q. 起動するたびにログインを求められます。
A. 多いのは ① システム時計のずれ(トークン検証は正確な時刻に依存)と、② macOSキーチェーンのロック/パスワード不一致で資格情報を保存できないケースです。時計を自動同期に設定し、macOSなら claude doctor でキーチェーンを点検してください。それでも直らなければ /logout/login でクリーンに入り直します。

Q. /status では何が分かりますか?
A. 今どの認証方法・資格情報で動いているか(サブスクのOAuthか、ANTHROPIC_API_KEY か、クラウド資格情報か)が分かります。認証トラブルの大半は「意図しない資格情報が選ばれている」ことなので、まず /status が鉄則です。表示の細部はバージョンで変わるため、最新の挙動は公式で確認してください。

Q. WSL や SSH 越しだとログインのブラウザが開かず失敗します。
A. リモート環境では、ブラウザのリダイレクトがローカルのコールバックに戻れないために起きます。Claude Code が表示するログインコードを貼り付けるc を押してURLをコピーして手元のブラウザで開く、WSL2なら BROWSER 環境変数を設定する、といった方法で回避できます。コード貼り付け方式を覚えておくと確実です。