Este documento apresenta de forma resumida e organizada os principais fluxos de autorização do OAuth 2.0, explicando seus usos, vantagens, limitações e boas práticas. Embora muitas vezes confundidos com fluxos de autenticação, é importante destacar que o OAuth 2.0 trata essencialmente de autorização, enquanto a autenticação de usuários é abordada pelo OpenID Connect (OIDC), uma extensão sobre o OAuth 2.0.
- Resource Owner: Usuário dono dos dados.
- Client: Aplicação que deseja acessar os recursos.
- Authorization Server (AS): Responsável pela autenticação/autorização e emissão dos tokens.
- Resource Server (RS): API protegida que valida tokens.
- Access Token: curto prazo, usado em chamadas à API.
- Refresh Token: longo prazo, usado para renovar o access token.
- ID Token (OIDC): identidade do usuário (JWT), não é token de acesso.
-
Uso: SPAs, Mobile, Web.
-
Passos:
- Cliente gera
code_verifierecode_challenge. - Redireciona o usuário ao AS com
response_type=code. - Usuário autentica → AS retorna
code. - Cliente troca
code+code_verifierpor access token. - Cliente chama a API com
Bearer <access_token>.
- Cliente gera
-
Vantagem: Proteção contra interceptação de código.
-
🔗 Exemplo prático: Projeto demonstrativo no GitHub
- Uso: Apps confidenciais (backend com segredo seguro).
- Diferença: Necessita
client_secret.
- Uso: Comunicação máquina→máquina (jobs, microsserviços).
- Fluxo: Apenas
client_ideclient_secretsão utilizados para obter o token.
-
Uso: TVs, consoles, IoT.
-
Fluxo:
- Device obtém
device_codee exibeuser_code+ URL. - Usuário autentica em outro dispositivo.
- Device consulta até receber o token.
- Device obtém
-
Uso: Renovar access token sem re-login.
-
Boas práticas:
- Rotação de tokens.
- Em SPAs: evitar persistência local, usar cookies HttpOnly.
- Problema: Access token exposto na URL.
- Não recomendado. Use Authorization Code + PKCE.
- Problema: Cliente coleta login/senha diretamente.
- Não recomendado.
- 🌐 Web Backend: Authorization Code + PKCE (com secret).
- 🖥️ SPA: Authorization Code + PKCE.
- 📱 Mobile: Authorization Code + PKCE.
- 🤝 Serviço→Serviço: Client Credentials.
- 📺 TV/IoT: Device Code.
- ❌ Implicit/ROPC: evitar.
- Sempre usar HTTPS.
- Tokens com curto TTL.
- Usar escopos mínimos.
- Rotacionar secrets e refresh tokens.
- Configurar CORS restrito.
- Revogar tokens no logout.