コンテンツにスキップ

OAuth サブスクリプション

Claudex は 7 つのプロバイダーに対する OAuth ベース認証をサポートしており、既存のサブスクリプション(Claude Max、ChatGPT Plus、GitHub Copilot など)を別途 API キーなしで使用できます。

api_key を提供する代わりに、auth_type = "oauth" を設定して oauth_provider を指定します。Claudex はクレデンシャルチェーン全体を処理します: ネイティブ CLI 設定からのトークン読み取り、デバイスコードフローの実行、システムキーリングへのトークン保存、有効期限前の自動リフレッシュ。

[[profiles]]
name = "codex-sub"
provider_type = "OpenAIResponses"
base_url = "https://chatgpt.com/backend-api/codex"
default_model = "gpt-5.3-codex"
auth_type = "oauth"
oauth_provider = "openai"
プロバイダーoauth_providerログイン方法フォールバック
Claudeclaude~/.claude/.credentials.json から読み取り
ChatGPT/Codexopenaiブラウザ PKCE またはデバイスコード~/.codex/auth.json(Codex CLI)
Google GeminigoogleGemini CLI のクレデンシャルから読み取り
KimikimiKimi CLI のクレデンシャルから読み取り
Qwenqwenデバイスコードフロー
GitHub Copilotgithubデバイスコードフロー~/.config/github-copilot/
GitLab DuogitlabGITLAB_TOKEN 環境変数

各プロバイダーはクレデンシャルチェーンパターンに従います:

  1. システムキーリングを確認: 以前保存されたトークンがあるか
  2. ネイティブ CLI 設定から読み取り: プロバイダー固有のパス
  3. OAuth フローを開始: トークンが見つからない場合、ブラウザ PKCE またはデバイスコード

取得されたトークンは以降の使用のためにシステムキーリングに保存されます。

OAuthToken {
access_token: String,
refresh_token: Option<String>,
expires_at: Option<i64>, // Unix ミリ秒
token_type: Option<String>,
scopes: Option<Vec<String>>,
extra: Option<Value>, // プロバイダー固有のデータ
}

プロキシは各リクエストの前にトークンの有効期限を確認します。トークンが期限切れまで 60 秒以内の場合:

  1. refresh_token(利用可能な場合)を使用してリフレッシュを試行
  2. リフレッシュ成功時、キーリングを更新
  3. リフレッシュ失敗時、トークンを無効化し次回使用時に再ログインを要求

プロバイダーが HTTP 401 を返した場合、プロキシは:

  1. 現在のトークンを無効化
  2. クレデンシャルチェーンから新しいトークンの読み込みを試行
  3. 新しいトークンでリクエストを 1 回リトライ
  4. リトライも失敗した場合、エラーを Claude Code に返す

Claude OAuth プロファイルは特別です: プロキシが完全にスキップされます。Claude OAuth プロファイルを実行すると、Claudex は ANTHROPIC_BASE_URL を設定せずに Claude Code を直接起動します。Claude Code は ~/.claude/.credentials.json にある自身の組み込み OAuth セッションを使用します。

[[profiles]]
name = "claude-max"
provider_type = "DirectAnthropic"
base_url = "https://api.claude.ai"
default_model = "claude-sonnet-4-20250514"
auth_type = "oauth"
oauth_provider = "claude"

claudex auth login の手順は不要です。Claude Code にすでにログインしていれば、すぐに動作します。

2 つの OAuth フローをサポートしています:

  1. ブラウザ PKCE: ブラウザウィンドウを開いて OpenAI にログインし、ローカルコールバックサーバー経由でトークンを受信
  2. デバイスコード: ヘッドレス環境向けに、URL で入力するコードを表示

Claudex はフォールバックとして Codex CLI の設定 ~/.codex/auth.json からもトークンを読み取ります。ChatGPT-Account-ID ヘッダーは Codex CLI の認証ファイルから自動抽出されます。

Terminal window
# ブラウザフロー(デフォルト)
claudex auth login openai --profile codex-sub
# デバイスコードフロー(ヘッドレス)
claudex auth login openai --profile codex-sub --headless

GitHub のデバイスコードフローを使用します:

  1. claudex auth login github がデバイスコードを表示
  2. https://github.com/login/device を開いてコードを入力
  3. トークンがシステムキーリングに保存される

利用可能な場合、~/.config/github-copilot/ の既存トークンからの読み取りにフォールバックします。

GITLAB_TOKEN 環境変数を通じてパーソナルアクセストークンを使用します:

Terminal window
export GITLAB_TOKEN=glpat-...
claudex auth login gitlab --profile gitlab-duo

セルフホスト GitLab インスタンスの場合:

Terminal window
claudex auth login gitlab --enterprise-url https://gitlab.mycompany.com --profile gitlab-duo

Gemini CLI の設定からクレデンシャルを読み取ります。Gemini CLI をインストールして認証した後、claudex auth login google で保存されたトークンを読み取ります。

OAuth デバイスコードフローを使用します。Claudex は認証用のコードと URL を表示します:

Terminal window
claudex auth login qwen --profile qwen-oauth
# 表示: Go to https://... and enter code: XXXX-XXXX

Google Gemini フローと同様に、Kimi CLI の設定からクレデンシャルを読み取ります。

OAuth プロファイル(Claude を除く)で Claude Code を起動する際、Claudex は以下を設定します:

ANTHROPIC_AUTH_TOKEN=claudex-passthrough

これは X-Api-Key の代わりに Authorization: Bearer ヘッダーを使用し、Claude Code 自体の ANTHROPIC_API_KEY 機構との競合を防ぎます。プロキシはパススルートークンを実際の OAuth トークンに置き換えます。

Terminal window
# プロバイダーにログイン
claudex auth login <PROVIDER> [--profile <NAME>] [--enterprise-url <URL>] [--headless]
# すべての OAuth プロファイルの認証ステータスを確認
claudex auth status
# 特定のプロバイダーを確認
claudex auth status openai
# 手動でトークンをリフレッシュ
claudex auth refresh <PROVIDER>
# 保存されたトークンを削除
claudex auth logout <PROVIDER>

auth_type = "oauth" でプロファイルを作成すると、各プロバイダーには base_urlprovider_typedefault_model の組み込みデフォルトがあります:

プロバイダーデフォルト base_urlデフォルト provider_typeデフォルトモデル
Claudehttps://api.claude.aiDirectAnthropicclaude-sonnet-4-20250514
ChatGPThttps://chatgpt.com/backend-api/codexOpenAIResponsesgpt-5.3-codex
GitHubhttps://api.githubcopilot.comOpenAICompatiblegpt-4o
GitLabhttps://gitlab.com/api/v4/ai/llm/proxyOpenAICompatibleclaude-sonnet-4-20250514
Googlehttps://generativelanguage.googleapis.com/v1beta/openaiOpenAICompatiblegemini-2.5-pro
Qwenhttps://chat.qwen.ai/apiOpenAICompatibleqwen3-235b-a22b
Kimihttps://api.moonshot.cn/v1OpenAICompatiblekimi-k2-0905-preview

これらのデフォルトは、プロファイル設定で base_urldefault_model を省略した場合に使用されます。