「OAuth not supported」401エラーの原因と対処 — Claude Code
「OAuth authentication is currently not supported」401は、OAuth設定の不備とは限らず、版ごとの回帰で出た例が2回あります。該当する版と切り分けの手順です。
「OAuth authentication is currently not supported」とは何か
Claude Code実行中に、次の401エラーが表示されることがあります。
API Error: 401 {"type":"error","error":{"type":"authentication_error","message":"OAuth authentication is currently not supported."}}メッセージだけを読むと「OAuth認証そのものが対応していない」ように見えますが、そうではありません。Claude CodeのOAuth認証(claude.aiログインやMax / Team / Enterpriseのサブスクリプション認証)は通常どおり提供されています。
このメッセージは、APIがリクエストを拒否したときに返す401応答の文面です。過去の2回は、どちらも特定の版が原因で、更新か版の切り替えで直りました。2回目は、報告者がリクエスト内容の不整合を疑っています。/loginと/logoutを繰り返しても直らないという報告がissue #5893に、同じトークンでcurlを直接叩くと通るという報告がissue #54235にあります。
authentication_errorは、401応答のJSONにあるerror.typeの値で、認証の失敗全般に付きます。この値だけでは原因は決まりません。見るべきは、そのあとのmessageです。
| 画面や応答の文面 | 原因 | 読む節 |
|---|---|---|
OAuth authentication is currently not supported. | 原因特定の版の回帰、または環境変数 | 読む節この記事の前半 |
Failed to authenticate. API Error: 401 OAuth token has expired / Please run /login · API Error: 401 OAuth token has expired | 原因保存済みのログインの有効期限切れ | 読む節「似た名前のOAuthエラーとの違い」 |
OAuth token revoked · Please run /login | 原因ログアウトや管理者の操作による、保存済みのログインの取り消し | 読む節同上 |
自分の状況はどの型に当たるか
原因の切り分けは、使っているバージョンと環境変数から始めます。大きくは次の3つに分かれます。
3つの型
古い版を使っている
v1.0.82〜v1.0.87の間に出た回帰です。
v2.1.121付近で環境変数を設定している
CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS=1を設定していると出ました。最新版で出る
2回の回帰では説明できません。ログインの状態、
ANTHROPIC_API_KEYなどの資格情報、ゲートウェイの有無を順に見ます。
2回の集中発生を日付で並べる
どちらの回も、公開直後の版に原因があり、数日以内に修正版が出ています。
401が集中した2回
- 2025年8月16日v1.0.82公開、同日にissue #5893
実行中に突然401が出て、再ログインで直る人と直らない人に分かれました。
- 2025年8月22日v1.0.88で修正
changelogに「Fixed issue causing "OAuth authentication is currently not supported"」と載りました。報告から6日後です。
- 2026年4月28日v2.1.121公開、同日にissue #54235
CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS=1を設定した環境で、401の再試行ループになりました。 - 2026年4月29日v2.1.123で修正
報告から1日後の修正です。
2025年8月: v1.0.82〜v1.0.87の回帰
最初の集中報告はissue #5893です。コメント欄では「v1.0.82と1.0.83にあり、1.0.81には無い」とユーザーが切り分けていました。
8月22日には、リポジトリのCollaborator権限を持つ人が影響範囲を書き込みました。影響を受けたのはv1.0.82〜v1.0.87で、メインループとサブエージェントの両方に及んだという内容です。ユーザー側の切り分けは、範囲の途中までしか捉えていませんでした。
当座の回避策も同じコメントにあります。v1.0.81へのダウングレードと、環境変数DISABLE_AUTOUPDATER=1で自動更新を止める組み合わせです。ユーザー間ではv1.0.73への巻き戻しや、npm install -g @anthropic-ai/claude-codeでの再インストールも報告されました。
changelog上は、修正がv1.0.88で入っています。ただし、1.0.88に更新しても出続けたという報告がコメントに1件あります。
2026年4月: CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS=1との組み合わせ
2回目はissue #54235です。報告者は、WSL2上のv2.1.121で、Claude Max(OAuth)とOpus 4.7を使っていました。環境変数だけを入れ替えて切り分けた結果が次の表です。
| バージョン | CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS | 結果 |
|---|---|---|
| v2.1.120 | CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS1 | 結果正常 |
| v2.1.121 | CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS1 | 結果401の再試行ループ |
| v2.1.121 | CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS未設定 | 結果正常 |
同じissueには、macOSでも同じ条件で再現した、Teamプランでも出た、v2.1.112へ戻すと直ったというコメントが付いています。モデルを問わず出るという声もあり、Opus 4.7に固有の問題とは言い切れません。
報告者の見立ては、anthropic-betaヘッダーだけが外れ、ヘッダーと対になるリクエスト本文のフィールドが残ったために、サーバーが拒否したというものです。この説明は仮説で、changelogの修正文は次の1行だけです。
Fixed OAuth authentication failing with a 401 retry loop when
CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS=1is set
UIにはRetrying in Ns · attempt N/10としか出ません。401の実物は、--debug-fileを付けて起動したときのログに出ます。
claude --debug-file /tmp/claude-debug.log--debug-fileは、v2.1.289のclaude --helpで「Write debug logs to a specific file path (implicitly enables debug mode)」と説明されています。ログの読み方はデバッグフラグの解説にあります。修正の経緯はClaude Code v2.1.123のリリースノートにまとめています。
この環境変数は何度も直されている
CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETASは、プロキシやゲートウェイがベータ用のヘッダーを通さない環境向けの変数です。changelogを引くと、この変数に関する修正は6回あり、症状は毎回違います。
| 修正した版 | 直った症状 |
|---|---|
| v2.1.25 | 直った症状BedrockとVertexのゲートウェイでベータヘッダーの検証エラー |
| v2.1.27 | 直った症状ゲートウェイでコンテキスト管理の検証エラー |
| v2.1.77 | 直った症状ベータ用のツールスキーマのフィールドが残り、ゲートウェイが拒否 |
| v2.1.81 | 直った症状structured-outputsのベータヘッダーが残り、Vertex・Bedrock向けで400 |
| v2.1.123 | 直った症状OAuthの401再試行ループ(本記事のエラー) |
| v2.1.287 | 直った症状セッションタイトルとプロンプトフックのリクエストに、structured-outputの形式が残る |
現在のドキュメントでは、この変数が止めるものと残すものが分けて書かれています。止めるのは、context_managementフィールド、strictやdefer_loadingといったベータ用のツールスキーマ、output_config.task_budget、MCPツール検索などです。structured-outputのoutput_config.formatも止めますが、これはv2.1.287以降です。
一方、拡張コンテキスト・interleaved thinking・effortのヘッダーと、output_config.effortフィールドは止めません。ゲートウェイ側の設計はLLMゲートウェイのプロトコル解説が詳しい内容です。structured-outputだけを止めたいなら、v2.1.288以降のCLAUDE_CODE_DISABLE_STRUCTURED_OUTPUTS=1もあります。
今このエラーが出たら何を確認するか
確認の順番
- 1
バージョンと認証の状態を見る
claude --versionでバージョンを確かめます。あわせてclaude auth statusを実行すると、認証の状態がJSONで返ります。 - 2
環境変数を探す
CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETASは、シェルの起動ファイル、~/.claude/settings.jsonのenv、組織配布のmanaged-settings.jsonのどれにも入っている可能性があります。CLAUDE_CODE_OAUTH_TOKENを設定している場合、401が返った後も、保存済みのログインのトークンに切り替えず、設定した値を送り続けます。/statusにAuth tokenの行が出ているかを見ます。 - 3
更新する
v2.1.123より前なら
claude updateで上げます。v1.0.82〜v1.0.87の古い版も、更新して修正が入ったv1.0.88以降にします。 - 4
更新できないときだけ変数を外す
unset CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETASで回避できます。この変数はゲートウェイの制約のために入っていることが多いので、外す前に配布元を確かめます。 - 5
どちらにも当たらなければ別の原因を探す
最新版で、変数も無いのに出るなら、次の節の切り分けに進みます。
v2.1.289での実行結果は次のとおりです。claude auth statusは、ログインしていない環境ではauthMethodがnoneになります(保存先のパスは省略しています)。
claude --version
claude auth status2.1.289 (Claude Code)
{
"loggedIn": false,
"authMethod": "none",
"apiProvider": "firstParty"
}claude updateは、同じバージョンのヘルプで「Check for updates and install if available」と説明されています。
最新版でも出るときに見るところ
2回の回帰はchangelogに修正が載っているので、v2.1.123以降でこの文面が出た場合は別の経路を疑います。issue #5893は、v1.0.88で直った後も開いたままで、その後もコメントが続いています。
2025年12月以降のコメントには、Claude Desktopの中のCodeセッションで同じ401が出る報告が並びます。CLIやVS Code拡張では動くのに、デスクトップアプリだけが失敗するという内容は、2026年4月にも出ています。この報告者はアプリ内の再ログインとキャッシュ削除を試しても直らず、原因は特定されていません。ヘルプメニューの「Clear Cache and Restart」で直ったというコメントもありますが、効かなかった人もいます。
CLIで切り分けるなら、次の3点が公式ドキュメントに書かれています。
- 承認済みの
ANTHROPIC_API_KEYが優先される。承認したAPIキーは、サブスクリプションのログインより優先されます。キーの組織が無効だと認証に失敗するので、unset ANTHROPIC_API_KEYでサブスクリプションに戻し、/statusで使われている方式を見ます。 - ゲートウェイ経由なら、401の文面はゲートウェイのもの。
ANTHROPIC_BASE_URLがゲートウェイを指している場合、401の後ろの文はゲートウェイが返したものです。/loginでは変わらないので、ゲートウェイが求める資格情報を直します。 - 組織がAPIキー認証を無効にしている。この場合の切り分けは、組織がAPIキー認証を無効化したときの対処で扱っています。
更新に失敗した保存済みのログインは、v2.1.206以降、モデルへのリクエストの前に止まります。それより前の版は、環境に残っていた別の資格情報でリクエストを送り、401になることがありました。
/statusの画面は/statusコマンドの解説にあります。更新の手順はClaude Codeのアップデート方法にまとめています。
似た名前のOAuthエラーとの違い
「OAuth」を含むエラーは複数あり、文面が似ているので混同しやすい部分です。
| メッセージ | 意味 | 対処の起点 |
|---|---|---|
OAuth authentication is currently not supported | 意味本記事のエラー。過去2回は特定の版の不具合 | 対処の起点バージョンと環境変数の確認 |
OAuth token revoked / Failed to authenticate. API Error: 401 OAuth token has expired | 意味保存済みのログインが無効になった状態。-pやAgent SDKではFailed to authenticateが先頭に付く | 対処の起点/loginの再実行 |
OAuth token does not meet scope requirement | 意味トークンが、新しい機能の必要とする権限範囲を持たない | 対処の起点/loginを1回(先にログアウトは不要) |
API Error: 401 Invalid authentication credentials | 意味資格情報の形式は通るが、アカウントや組織が拒否された | 対処の起点/statusで有効な資格情報を見る |
失効系の切り分けは「OAuth token revoked」の対処、権限範囲の不足は「OAuth scope requirement」エラーの意味と対処にまとめています。最後のInvalid authentication credentialsは、公式ドキュメントでは、資格情報が最近取り消された、組織が無効化された、アカウントが停止されたといった場合に返ると説明されています。期限切れでは出ません。
保存済みのログインそのものが壊れている場合は、Claude Code「Not logged in」エラーの原因と対処法の手順で切り分けます。
まとめ
この文面の401は、OAuthの設定の誤りを示すとは限らず、過去の2回はどちらもClaude Code側の回帰でした。最短で絞り込めるのは、バージョンとCLAUDE_CODE_DISABLE_EXPERIMENTAL_BETASの有無です。そこで当たらなければ、/statusに出る認証の方式から見ていきます。