Todos os artigos
FT-OAUTH-AUTH-CODE-V1· 1.0.0Integrações

OAuth 2.0 — Authorization Code grant + PKCE

Autenticação user-on-behalf via redirect ao provider. PKCE obrigatório (RFC 7636). Único grant que devolve refresh_token — Lefia renova automaticamente.

Atualizado em 8/22/2026

OAuth 2.0 — Authorization Code grant + PKCE



Grant user-on-behalf — usuário humano vai ao provider, autoriza o Lefia, volta com code. RFC 6749 §4.1 + PKCE RFC 7636 (S256).

Quando usar



  • Acessar dados em nome de um usuário real (Google Workspace, Microsoft 365 pessoal, GitHub, etc.)
  • Provider exige consent screen e refresh_token de longa duração
  • Conformidade que proíbe Client Credentials (provider só libera escopo via auth user)


Como configurar



No form REST, escolha Autenticação = oauth2_auth_code e preencha:

CampoExemplo
Token Endpointhttps://oauth2.googleapis.com/token
Authorize Endpointhttps://accounts.google.com/o/oauth2/v2/auth
Client IDApp OAuth registrado no provider
Client Secret(confidential client)
Scopeopenid email https://www.googleapis.com/auth/drive.readonly
Redirect URIDefault: https://lefia.ai/api/oauth/callback — registre no provider


Fluxo após salvar



  1. Salve a conexão (sem clicar em "Testar" ainda — não tem token).
  2. Clique no botão "Connect" no card da integração.
  3. Um popup abre com a tela de consent do provider.
  4. Após autorizar, o popup fecha sozinho e a UI atualiza com toast "Conexão autorizada".
  5. Daí em diante, "Testar" e o pipeline de mensagens usam o token cacheado.


Refresh automático



Authorization Code é o único grant que devolve refresh_token. O Lefia:

  • Cacheia access_token + refresh_token criptografados em oauth_tokens.
  • Quando access_token expira: tenta refresh transparentemente.
  • Se refresh falhar (refresh revogado / expirado): pipeline retorna erro "Reconecte a conexão" — botão "Reconectar" aparece pro user passar pelo redirect de novo.


Segurança



  • State CSRF + PKCE S256 obrigatórios. State persistido em oauth_authorization_states com TTL 15min e used_at anti-replay.
  • Callback valida origem, expiração e single-use antes de trocar code.
  • Refresh tokens criptografados com a mesma key dos credentials (AES-256-GCM).


Limitações



  • Provider deve registrar o Redirect URI exatamente como https://lefia.ai/api/oauth/callback (ou o custom que você configurar).
  • Popup blocker pode bloquear o flow — peça pro user permitir popups do site.
  • Tokens são per-connection, não compartilhados entre conexões.


Tickets relacionados



  • #195 implementação completa (PKCE, callback, refresh, UI Connect button).

Histórico de versões

  • 1.0.0

    OAuth 2.0 Authorization Code grant + PKCE (RFC 6749 §4.1 + RFC 7636). PKCE primitives, authorization URL builder, code → token exchange, refresh_token grant. Endpoints /api/oauth/authorize/start + /api/oauth/callback + /oauth/done page com postMessage. UI: OAuthConnectButton no integration-card. Migration oauth_authorization_states + oauth_tokens.refresh_token_encrypted. authType=oauth2_auth_code wireado em REST + OData + metadata. 17 testes novos.

    5/16/2026 · new