Pular para o conteúdo

Assinaturas OAuth

O Claudex suporta autenticacao baseada em OAuth para 7 provedores, permitindo usar assinaturas existentes (Claude Max, ChatGPT Plus, GitHub Copilot, etc.) sem chaves API separadas.

Em vez de fornecer uma api_key, voce configura auth_type = "oauth" e especifica um oauth_provider. O Claudex gerencia toda a cadeia de credenciais: leitura de tokens de configuracoes nativas de CLI, execucao de fluxos device code, armazenamento de tokens no keyring do sistema e refresh automatico antes da expiracao.

[[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"
Provedoroauth_providerMetodo de LoginFallback
ClaudeclaudeLe ~/.claude/.credentials.json
ChatGPT/CodexopenaiPKCE via navegador ou Device Code~/.codex/auth.json (Codex CLI)
Google GeminigoogleLe credenciais do Gemini CLI
KimikimiLe credenciais do Kimi CLI
QwenqwenDevice Code flow
GitHub CopilotgithubDevice Code flow~/.config/github-copilot/
GitLab DuogitlabVariavel de ambiente GITLAB_TOKEN

Cada provedor segue um padrao de cadeia de credenciais:

  1. Verificar keyring do sistema em busca de um token previamente armazenado
  2. Ler da configuracao nativa da CLI (caminhos especificos do provedor)
  3. Iniciar fluxo OAuth (PKCE via navegador ou device code) se nenhum token for encontrado

Uma vez obtidos, os tokens sao armazenados no keyring do sistema para uso subsequente.

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>, // dados especificos do provedor
}

O proxy verifica a expiracao do token antes de cada requisicao. Se um token estiver a 60 segundos de expirar:

  1. Tenta fazer refresh usando refresh_token (se disponivel)
  2. Em caso de sucesso no refresh, atualiza o keyring
  3. Se o refresh falhar, invalida o token e solicita novo login no proximo uso

Quando um provedor retorna HTTP 401, o proxy:

  1. Invalida o token atual
  2. Tenta carregar um token novo da cadeia de credenciais
  3. Reenvia a requisicao uma vez com o novo token
  4. Se o retry falhar, retorna o erro ao Claude Code

Profiles OAuth Claude sao especiais: o proxy e completamente ignorado. Quando voce executa um profile OAuth Claude, o Claudex inicia o Claude Code diretamente sem definir ANTHROPIC_BASE_URL. O Claude Code usa sua propria sessao OAuth embutida de ~/.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"

Nenhum passo de claudex auth login e necessario. Se voce ja estiver logado no Claude Code, funciona imediatamente.

Suporta dois fluxos OAuth:

  1. PKCE via Navegador: Abre uma janela do navegador para login na OpenAI, recebe o token via servidor de callback local
  2. Device Code: Para ambientes headless, exibe um codigo para inserir em uma URL

O Claudex tambem le tokens da configuracao do Codex CLI em ~/.codex/auth.json como fallback. O header ChatGPT-Account-ID e extraido automaticamente do arquivo de autenticacao do Codex CLI.

Terminal window
# Fluxo via navegador (padrao)
claudex auth login openai --profile codex-sub
# Fluxo device code (headless)
claudex auth login openai --profile codex-sub --headless

Usa o fluxo Device Code do GitHub:

  1. claudex auth login github exibe um device code
  2. Abra https://github.com/login/device e insira o codigo
  3. O token e armazenado no keyring do sistema

Faz fallback para tokens existentes em ~/.config/github-copilot/ se disponiveis.

Usa um Personal Access Token via variavel de ambiente GITLAB_TOKEN:

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

Para instancias GitLab auto-hospedadas:

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

Le credenciais da configuracao do Gemini CLI. Instale e autentique com o Gemini CLI primeiro, e entao claudex auth login google le o token armazenado.

Usa o fluxo OAuth Device Code. O Claudex exibe um codigo e URL para autenticacao:

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

Le credenciais da configuracao do Kimi CLI, similar ao fluxo do Google Gemini.

Ao lancar o Claude Code com um profile OAuth (exceto Claude), o Claudex define:

ANTHROPIC_AUTH_TOKEN=claudex-passthrough

Isso usa o header Authorization: Bearer em vez de X-Api-Key, evitando conflitos com o mecanismo ANTHROPIC_API_KEY do proprio Claude Code. O proxy entao substitui o token passthrough pelo token OAuth real.

Terminal window
# Fazer login em um provedor
claudex auth login <PROVIDER> [--profile <NAME>] [--enterprise-url <URL>] [--headless]
# Verificar status de autenticacao de todos os profiles OAuth
claudex auth status
# Verificar um provedor especifico
claudex auth status openai
# Atualizar manualmente um token
claudex auth refresh <PROVIDER>
# Remover tokens armazenados
claudex auth logout <PROVIDER>

Quando voce cria um profile com auth_type = "oauth", cada provedor tem valores padrao embutidos para base_url, provider_type e default_model:

Provedorbase_url padraoprovider_type padraoModelo padrao
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

Estes valores padrao sao usados se voce omitir base_url ou default_model da configuracao do profile.