Fluxo do Código de Autorização
O fluxo descrito nesta documentação refere-se ao Authorization Code Flow, descrito na documentação oficial do OpenID Connect.
Visão Geral
O fluxo de código de autorização retorna um Authorization Code para o cliente, que poderá trocá-lo por um id_token e um access_token diretamente. Este fluxo possui o benefício de não expor nenhum token ao user_agent (navegador do usuário) e possivelmente para malwares com acesso ao user_agent.
Diagrama do Fluxo
┌─────────┐ ┌──────────────────┐
│ Cliente │ │ Provedor de │
│ (App) │ │ Identidade (IdP) │
└────┬────┘ └──────┬───────────┘
│ │
│ 1. Redireciona para /authorize │
│ com client_id, redirect_uri, scope │
├──────────────────────────────────────────────────────>│
│ │
│ │ 2. Usuário faz login
│ │<──────────────────┐
│ │ │
│ │ 3. Autenticação │
│ │ bem-sucedida │
│ │──────────────────>│
│ │ │
│ 4. Redireciona para redirect_uri │ │
│ com authorization code │ │
│<──────────────────────────────────────────────────────┤ │
│ │ │
│ 5. POST /api/token/v2 │ │
│ com code, client_id, client_secret │ │
├──────────────────────────────────────────────────────>│ │
│ │ │
│ 6. Retorna id_token e access_token │ │
│<──────────────────────────────────────────────────────┤ │
│ │ │
│ 7. Valida id_token │ │
│ (iss, aud, exp, signature) │ │
│ │ │
│ 8. Usa tokens para acessar recursos │ │
│ │ │Etapas Detalhadas
1. Solicitação de Autorização
O cliente redireciona o usuário para o endpoint de autorização com os parâmetros necessários.
GET {login-producao}/authorize?response_type=code&scope=openid profile&client_id=...&redirect_uri=...2. Autenticação do Usuário
O sistema apresenta a tela de login para o usuário.
3. Autorização
Após o login bem-sucedido, o sistema processa a autorização.
4. Callback com Authorization Code
O usuário é redirecionado de volta para a redirect_uri com o código de autorização.
GET /callback?code=50b98752-ac5e-4bf3-a59b-7456f9f586855. Troca do Código por Tokens
O cliente faz uma requisição POST servidor-para-servidor para trocar o código por tokens.
POST {security-producao}/api/token/v2?grant_type=authorization_code&client_id=...&client_secret=...&code=...6. Recebimento dos Tokens
O cliente recebe o id_token e access_token.
7. Validação do ID Token
O cliente valida o ID Token antes de utilizá-lo:
- Verifica o emissor (iss)
- Verifica a audiência (aud)
- Verifica a expiração (exp)
- Valida a assinatura
8. Uso dos Tokens
O cliente utiliza os tokens para:
- Identificar o usuário (id_token)
- Acessar recursos protegidos (access_token)
Segurança
Este fluxo é seguro porque:
- O
client_secretnunca é exposto ao navegador - Os tokens são trocados em comunicação servidor-para-servidor
- O código de autorização é de uso único e tem curta duração
- Todos os tokens são assinados e podem ser validados
