Перейти к содержимому

OAuth-подписки

Claudex поддерживает OAuth-аутентификацию для 7 провайдеров, позволяя использовать существующие подписки (Claude Max, ChatGPT Plus, GitHub Copilot и т.д.) без отдельных API-ключей.

Вместо указания api_key вы настраиваете auth_type = "oauth" и указываете oauth_provider. Claudex управляет полной цепочкой учётных данных: чтение токенов из нативных конфигураций CLI, выполнение device code flow, хранение токенов в системной связке ключей и автоматическое обновление до истечения срока.

[[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/CodexopenaiBrowser PKCE или Device Code~/.codex/auth.json (Codex CLI)
Google GeminigoogleЧитает учётные данные Gemini CLI
KimikimiЧитает учётные данные Kimi CLI
QwenqwenDevice Code flow
GitHub CopilotgithubDevice Code flow~/.config/github-copilot/
GitLab DuogitlabПеременная окружения GITLAB_TOKEN

Каждый провайдер следует паттерну цепочки учётных данных:

  1. Проверка системной связки ключей на наличие ранее сохранённого токена
  2. Чтение из нативной конфигурации CLI (пути, специфичные для провайдера)
  3. Инициация OAuth-потока (browser PKCE или device code), если токен не найден

Полученные токены сохраняются в системной связке ключей для последующего использования.

OAuthToken {
access_token: String,
refresh_token: Option<String>,
expires_at: Option<i64>, // Unix milliseconds
token_type: Option<String>,
scopes: Option<Vec<String>>,
extra: Option<Value>, // данные, специфичные для провайдера
}

Прокси проверяет срок действия токена перед каждым запросом. Если до истечения токена осталось менее 60 секунд:

  1. Попытка обновления с использованием refresh_token (если доступен)
  2. При успешном обновлении связка ключей обновляется
  3. Если обновление не удалось, токен инвалидируется, и при следующем использовании запрашивается повторный вход

Когда провайдер возвращает HTTP 401, прокси:

  1. Инвалидирует текущий токен
  2. Пытается загрузить свежий токен из цепочки учётных данных
  3. Повторяет запрос один раз с новым токеном
  4. Если повторный запрос неуспешен, возвращает ошибку в Claude Code

OAuth-профили Claude особенные: прокси полностью пропускается. Когда вы запускаете OAuth-профиль Claude, Claudex запускает Claude Code напрямую без установки ANTHROPIC_BASE_URL. Claude Code использует собственную встроенную OAuth-сессию из ~/.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"

Шаг claudex auth login не требуется. Если вы уже вошли в Claude Code, всё работает сразу.

Поддерживаются два OAuth-потока:

  1. Browser PKCE: открывает окно браузера для входа в OpenAI, получает токен через локальный сервер обратного вызова
  2. Device Code: для headless-сред отображает код для ввода по URL

Claudex также читает токены из конфигурации Codex CLI по пути ~/.codex/auth.json как запасной вариант. Заголовок ChatGPT-Account-ID автоматически извлекается из файла авторизации Codex CLI.

Окно терминала
# Browser flow (по умолчанию)
claudex auth login openai --profile codex-sub
# Device code flow (headless)
claudex auth login openai --profile codex-sub --headless

Использует Device Code flow GitHub:

  1. claudex auth login github отображает device code
  2. Откройте https://github.com/login/device и введите код
  3. Токен сохраняется в системной связке ключей

Запасной вариант: чтение существующих токенов из ~/.config/github-copilot/, если доступны.

Использует Personal Access Token через переменную окружения GITLAB_TOKEN:

Окно терминала
export GITLAB_TOKEN=glpat-...
claudex auth login gitlab --profile gitlab-duo

Для self-hosted инстансов GitLab:

Окно терминала
claudex auth login gitlab --enterprise-url https://gitlab.mycompany.com --profile gitlab-duo

Читает учётные данные из конфигурации Gemini CLI. Сначала установите и аутентифицируйтесь в Gemini CLI, затем claudex auth login google прочитает сохранённый токен.

Использует OAuth Device Code flow. Claudex отображает код и URL для аутентификации:

Окно терминала
claudex auth login qwen --profile qwen-oauth
# Отображает: Go to https://... and enter code: XXXX-XXXX

Читает учётные данные из конфигурации Kimi CLI, аналогично потоку Google Gemini.

При запуске Claude Code с OAuth-профилем (кроме Claude) Claudex устанавливает:

ANTHROPIC_AUTH_TOKEN=claudex-passthrough

Это использует заголовок Authorization: Bearer вместо X-Api-Key, предотвращая конфликты с собственным механизмом ANTHROPIC_API_KEY в Claude Code. Прокси затем заменяет passthrough-токен на реальный OAuth-токен.

Окно терминала
# Вход к провайдеру
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_url, provider_type и default_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_url или default_model в конфигурации профиля.