Authorization Code Flow - Passo a Passo para o Sucesso
O Caminho Feliz (Happy Path) é quando tudo funciona perfeitamente no fluxo de autenticação. É o cenário ideal onde o usuário consegue fazer login com sucesso, sem erros ou problemas. Vamos acompanhar esta jornada!
Imagine que você quer entrar no seu aplicativo favorito (como Instagram ou Netflix). Você clica no botão "Entrar" ou "Login".
Exemplo: João quer ver seus vídeos no StreamApp e clica em "Fazer Login".
O usuário acessa uma aplicação cliente (relying party) que requer autenticação. A aplicação não possui credenciais do usuário localmente.
GET /app/protected-resource Host: myapp.com Cookie: (não autenticado)
O aplicativo diz: "Eu não sei quem você é, vou te mandar para o Google/Facebook/Microsoft para eles confirmarem sua identidade". É como mostrar seu RG na portaria de um prédio.
Personagem em ação: O Capitão OpenID Connect entra em cena e diz "Vamos ao Provedor de Identidade!"
A aplicação cliente redireciona o usuário para o Authorization Server (AS) do provedor de identidade, incluindo parâmetros PKCE para segurança.
GET /auth? response_type=code& client_id=myapp123& redirect_uri=https://myapp.com/callback& scope=openid profile email& state=random_state_123& code_challenge=ABC123...& code_challenge_method=S256 Host: identity-provider.com
Agora você está na página do Google (ou outro provedor). Você digita seu email e senha normalmente, como sempre fez. É aquela tela que você já conhece!
Exemplo: João digita "joao@gmail.com" e sua senha no Google.
O Authorization Server apresenta interface de autenticação. Usuário insere credenciais e o AS valida contra seu banco de usuários.
POST /login Host: identity-provider.com Content-Type: application/x-www-form-urlencoded username=user@example.com& password=securepassword& session_id=session123
O Google confirma: "Sim, esse é realmente o João!". Então ele cria uma "nota de autorização" (como um ticket de estacionamento) que prova que você é você mesmo.
Personagem em ação: O Sergeant Authorization Code aparece carregando o código secreto!
Após autenticação bem-sucedida, o AS gera um authorization code único e temporário (válido por ~10 minutos). Este código será trocado por tokens.
// Código gerado internamente authorization_code = "abc123def456..." expiry = now() + 10_minutes associated_client = "myapp123" associated_user = "user@example.com"
O Google manda você de volta para o aplicativo original, mas agora você está carregando a "nota de autorização". É como voltar para a portaria do prédio com seu RG carimbado.
Exemplo: João volta para o StreamApp, mas agora com um código especial na URL.
O AS redireciona o usuário de volta para a aplicação cliente usando a redirect_uri fornecida, incluindo o authorization code e o state para validação.
HTTP/1.1 302 Found Location: https://myapp.com/callback? code=abc123def456...& state=random_state_123
O aplicativo pega a "nota de autorização" e vai até o Google nos bastidores (sem você ver) para trocar por uma "carteirinha de membro" oficial. É como trocar um voucher por um cartão VIP.
Personagens em ação: Access Token e ID Token chegam para a festa!
A aplicação cliente faz uma requisição server-to-server para trocar o authorization code por access_token, id_token e refresh_token, usando PKCE para validação.
POST /token Host: identity-provider.com Content-Type: application/x-www-form-urlencoded grant_type=authorization_code& code=abc123def456...& redirect_uri=https://myapp.com/callback& client_id=myapp123& code_verifier=xyz789...
O Google entrega para o aplicativo três coisas importantes: uma "chave de acesso" (para usar os recursos), um "documento de identidade" (provando quem você é) e uma "chave de renovação" (para quando a primeira expirar).
O AS retorna um JSON com access_token (para APIs), id_token (identidade do usuário) e refresh_token (para renovação). Tokens são JWTs assinados.
{
"access_token": "eyJhbGciOiJSUzI1NiI...",
"id_token": "eyJhbGciOiJSUzI1NiI...",
"refresh_token": "def456ghi789...",
"token_type": "Bearer",
"expires_in": 3600,
"scope": "openid profile email"
}
🎉 Parabéns! Você está dentro do aplicativo! Pode ver seus vídeos, fotos, ou usar qualquer funcionalidade. O aplicativo agora sabe quem você é e o que você pode fazer.
Exemplo: João está vendo seus vídeos no StreamApp, e o app mostra "Bem-vindo, João!" no canto da tela.
A aplicação valida o id_token, extrai informações do usuário e estabelece uma sessão local. O access_token fica disponível para chamadas de API autorizadas.
// ID Token decodificado
{
"sub": "12345",
"name": "João Silva",
"email": "joao@gmail.com",
"iat": 1699027200,
"exp": 1699030800
}
// Sessão local criada
session_id = "sess_abc123"
user_authenticated = true
Tempo total: Geralmente 2-5 segundos
Segurança: Máxima (PKCE + HTTPS + JWT)
Experiência: Transparente para o usuário