Skip to content

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-7456f9f58685

5. 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_secret nunca é 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

Próximos Passos

Documentação da API Fanbase