Aller au contenu

Abonnements OAuth

Claudex supporte l’authentification OAuth pour 7 fournisseurs, vous permettant d’utiliser vos abonnements existants (Claude Max, ChatGPT Plus, GitHub Copilot, etc.) sans cles API separees.

Au lieu de fournir une api_key, vous configurez auth_type = "oauth" et specifiez un oauth_provider. Claudex gere la chaine complete de credentials : lecture des tokens depuis les configs CLI natifs, execution des flux Device Code, stockage des tokens dans le trousseau systeme, et rafraichissement automatique avant expiration.

[[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"
Fournisseuroauth_providerMethode de connexionRepli
ClaudeclaudeLit ~/.claude/.credentials.json
ChatGPT/CodexopenaiPKCE navigateur ou Device Code~/.codex/auth.json (Codex CLI)
Google GeminigoogleLit les credentials du Gemini CLI
KimikimiLit les credentials du Kimi CLI
QwenqwenFlux Device Code
GitHub CopilotgithubFlux Device Code~/.config/github-copilot/
GitLab DuogitlabVariable d’environnement GITLAB_TOKEN

Chaque fournisseur suit un patron de chaine de credentials :

  1. Verifier le trousseau systeme pour un token precedemment stocke
  2. Lire depuis la config CLI native (chemins specifiques au fournisseur)
  3. Initier un flux OAuth (PKCE navigateur ou Device Code) si aucun token n’est trouve

Une fois obtenu, les tokens sont stockes dans le trousseau systeme pour les utilisations suivantes.

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>, // provider-specific data
}

Le proxy verifie l’expiration du token avant chaque requete. Si un token est a moins de 60 secondes de l’expiration :

  1. Tente de rafraichir en utilisant le refresh_token (si disponible)
  2. En cas de succes, met a jour le trousseau
  3. Si le rafraichissement echoue, invalide le token et demande une reconnexion lors de la prochaine utilisation

Quand un fournisseur retourne HTTP 401, le proxy :

  1. Invalide le token actuel
  2. Tente un chargement frais du token depuis la chaine de credentials
  3. Retente la requete une fois avec le nouveau token
  4. Si le retry echoue, retourne l’erreur a Claude Code

Les profils OAuth Claude sont speciaux : le proxy est entierement contourne. Quand vous executez un profil OAuth Claude, Claudex lance Claude Code directement sans definir ANTHROPIC_BASE_URL. Claude Code utilise sa propre session OAuth depuis ~/.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"

Aucune etape claudex auth login n’est necessaire. Si vous etes deja connecte a Claude Code, cela fonctionne immediatement.

Supporte deux flux OAuth :

  1. PKCE navigateur : ouvre une fenetre de navigateur pour la connexion OpenAI, recoit le token via un serveur de callback local
  2. Device Code : pour les environnements headless, affiche un code a saisir sur une URL

Claudex lit egalement les tokens depuis la config du Codex CLI a ~/.codex/auth.json en repli. L’en-tete ChatGPT-Account-ID est auto-extrait du fichier auth du Codex CLI.

Fenêtre de terminal
# Flux navigateur (defaut)
claudex auth login openai --profile codex-sub
# Flux device code (headless)
claudex auth login openai --profile codex-sub --headless

Utilise le flux Device Code de GitHub :

  1. claudex auth login github affiche un code d’appareil
  2. Ouvrez https://github.com/login/device et saisissez le code
  3. Le token est stocke dans le trousseau systeme

Se rabat sur la lecture des tokens existants depuis ~/.config/github-copilot/ si disponible.

Utilise un Personal Access Token via la variable d’environnement GITLAB_TOKEN :

Fenêtre de terminal
export GITLAB_TOKEN=glpat-...
claudex auth login gitlab --profile gitlab-duo

Pour les instances GitLab auto-hebergees :

Fenêtre de terminal
claudex auth login gitlab --enterprise-url https://gitlab.mycompany.com --profile gitlab-duo

Lit les credentials depuis la configuration du Gemini CLI. Installez et authentifiez-vous d’abord avec le Gemini CLI, puis claudex auth login google lit le token stocke.

Utilise le flux OAuth Device Code. Claudex affiche un code et une URL pour l’authentification :

Fenêtre de terminal
claudex auth login qwen --profile qwen-oauth
# Affiche : Go to https://... and enter code: XXXX-XXXX

Lit les credentials depuis la configuration du Kimi CLI, similaire au flux Google Gemini.

Lors du lancement de Claude Code avec un profil OAuth (sauf Claude), Claudex definit :

ANTHROPIC_AUTH_TOKEN=claudex-passthrough

Cela utilise l’en-tete Authorization: Bearer au lieu de X-Api-Key, evitant les conflits avec le mecanisme ANTHROPIC_API_KEY propre a Claude Code. Le proxy remplace ensuite le token passthrough par le veritable token OAuth.

Fenêtre de terminal
# Se connecter a un fournisseur
claudex auth login <PROVIDER> [--profile <NAME>] [--enterprise-url <URL>] [--headless]
# Verifier le statut auth pour tous les profils OAuth
claudex auth status
# Verifier un fournisseur specifique
claudex auth status openai
# Rafraichir manuellement un token
claudex auth refresh <PROVIDER>
# Supprimer les tokens stockes
claudex auth logout <PROVIDER>

Quand vous creez un profil avec auth_type = "oauth", chaque fournisseur dispose de valeurs par defaut integrees pour base_url, provider_type et default_model :

Fournisseurbase_url par defautprovider_type par defautModele par defaut
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

Ces valeurs par defaut sont utilisees si vous omettez base_url ou default_model dans la configuration du profil.