Przejdź do głównej zawartości

Subskrypcje OAuth

Claudex obsluguje uwierzytelnianie OAuth dla 7 dostawcow, pozwalajac uzywac istniejacych subskrypcji (Claude Max, ChatGPT Plus, GitHub Copilot itp.) bez osobnych kluczy API.

Zamiast podawac api_key, konfigurujesz auth_type = "oauth" i okreslasz oauth_provider. Claudex obsluguje pelen lancuch poswiadczen: odczytywanie tokenow z natywnych konfiguracji CLI, wykonywanie przeplywow device code, przechowywanie tokenow w lancuchu kluczy systemu i automatyczne odswiezanie przed wygasnieciem.

[[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"
Dostawcaoauth_providerMetoda logowaniaZapasowa
ClaudeclaudeOdczytuje ~/.claude/.credentials.json
ChatGPT/CodexopenaiBrowser PKCE lub Device Code~/.codex/auth.json (Codex CLI)
Google GeminigoogleOdczytuje poswiadczenia Gemini CLI
KimikimiOdczytuje poswiadczenia Kimi CLI
QwenqwenPrzeplyw Device Code
GitHub CopilotgithubPrzeplyw Device Code~/.config/github-copilot/
GitLab DuogitlabZmienna srodowiskowa GITLAB_TOKEN

Kazdy dostawca stosuje wzorzec lancucha poswiadczen:

  1. Sprawdzenie lancucha kluczy systemowego w poszukiwaniu wczesniej zapisanego tokenu
  2. Odczyt z natywnej konfiguracji CLI (sciezki specyficzne dla dostawcy)
  3. Inicjacja przeplywu OAuth (browser PKCE lub device code) jesli nie znaleziono tokenu

Po uzyskaniu tokeny sa przechowywane w lancuchu kluczy systemowym do pozniejszego uzycia.

OAuthToken {
access_token: String,
refresh_token: Option<String>,
expires_at: Option<i64>, // milisekundy Unix
token_type: Option<String>,
scopes: Option<Vec<String>>,
extra: Option<Value>, // dane specyficzne dla dostawcy
}

Proxy sprawdza wygasniecie tokenu przed kazdym zadaniem. Jesli token jest w ciagu 60 sekund od wygasniecia:

  1. Proba odswiezenia przy uzyciu refresh_token (jesli dostepny)
  2. Po udanym odswiezeniu aktualizacja lancucha kluczy
  3. Jesli odswiezanie sie nie powiedzie, uniewazniony token i monit o ponowne logowanie przy nastepnym uzyciu

Gdy dostawca zwroci HTTP 401, proxy:

  1. Uniewaznia biezacy token
  2. Podejmuje probe zaladowania nowego tokenu z lancucha poswiadczen
  3. Ponawia zadanie raz z nowym tokenem
  4. Jesli ponowna proba sie nie powiedzie, zwraca blad do Claude Code

Profile OAuth Claude sa specjalne: proxy jest calkowicie pomijane. Gdy uruchamiasz profil OAuth Claude, Claudex uruchamia Claude Code bezposrednio bez ustawiania ANTHROPIC_BASE_URL. Claude Code uzywa wlasnej wbudowanej sesji OAuth z ~/.claude/.credentials.json.

[[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"

Nie jest potrzebny krok claudex auth login. Jesli jestes juz zalogowany w Claude Code, dziala od razu.

Obsluguje dwa przeplywy OAuth:

  1. Browser PKCE: Otwiera okno przegladarki do logowania OpenAI, otrzymuje token przez lokalny serwer wywolania zwrotnego
  2. Device Code: Dla srodowisk bez interfejsu graficznego, wyswietla kod do wprowadzenia pod podanym URL

Claudex rowniez odczytuje tokeny z konfiguracji Codex CLI w ~/.codex/auth.json jako zapasowe. Naglowek ChatGPT-Account-ID jest automatycznie wyodrebniany z pliku uwierzytelniania Codex CLI.

Okno terminala
# Przeplyw przegladarkowy (domyslny)
claudex auth login openai --profile codex-sub
# Przeplyw device code (bez interfejsu graficznego)
claudex auth login openai --profile codex-sub --headless

Uzywa przeplywu Device Code GitHub:

  1. claudex auth login github wyswietla kod urzadzenia
  2. Otworz https://github.com/login/device i wprowadz kod
  3. Token jest przechowywany w lancuchu kluczy systemowym

Zapasowo odczytuje istniejace tokeny z ~/.config/github-copilot/ jesli dostepne.

Uzywa Personal Access Token przez zmienna srodowiskowa GITLAB_TOKEN:

Okno terminala
export GITLAB_TOKEN=glpat-...
claudex auth login gitlab --profile gitlab-duo

Dla samodzielnie hostowanych instancji GitLab:

Okno terminala
claudex auth login gitlab --enterprise-url https://gitlab.mycompany.com --profile gitlab-duo

Odczytuje poswiadczenia z konfiguracji Gemini CLI. Najpierw zainstaluj i uwierzytelnij sie w Gemini CLI, nastepnie claudex auth login google odczyta zapisany token.

Uzywa przeplywu OAuth Device Code. Claudex wyswietla kod i URL do uwierzytelnienia:

Okno terminala
claudex auth login qwen --profile qwen-oauth
# Wyswietla: Przejdz do https://... i wprowadz kod: XXXX-XXXX

Odczytuje poswiadczenia z konfiguracji Kimi CLI, podobnie do przeplywu Google Gemini.

Podczas uruchamiania Claude Code z profilem OAuth (z wyjatkiem Claude), Claudex ustawia:

ANTHROPIC_AUTH_TOKEN=claudex-passthrough

Uzywa to naglowka Authorization: Bearer zamiast X-Api-Key, zapobiegajac konfliktom z mechanizmem ANTHROPIC_API_KEY Claude Code. Proxy nastepnie zastepuje token passthrough rzeczywistym tokenem OAuth.

Okno terminala
# Zaloguj sie do dostawcy
claudex auth login <PROVIDER> [--profile <NAME>] [--enterprise-url <URL>] [--headless]
# Sprawdz status uwierzytelnienia dla wszystkich profili OAuth
claudex auth status
# Sprawdz konkretnego dostawce
claudex auth status openai
# Recznie odswiez token
claudex auth refresh <PROVIDER>
# Usun przechowywane tokeny
claudex auth logout <PROVIDER>

Gdy tworzysz profil z auth_type = "oauth", kazdy dostawca ma wbudowane domyslne wartosci dla base_url, provider_type i default_model:

DostawcaDomyslny base_urlDomyslny provider_typeDomyslny model
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

Te domyslne wartosci sa uzywane, jesli pominiesz base_url lub default_model w konfiguracji profilu.