Autenticação (Sessão vs JWT)
Explicado da forma mais simples possível… mas não mais simples.
Autenticação vs Autorização
Autenticação e Autorização resolvem duas questões fundamentais de segurança em qualquer sistema:
- Autenticação: “Quem você é?” – Provar e verificar a identidade do usuário
- Autorização: “O que você tem permissão para fazer?” – Determinar permissões e direitos de acesso
Depois que um usuário faz login uma vez, o sistema precisa de uma forma de “lembrar” dele em múltiplas requisições sem pedir as credenciais repetidamente. Existem duas abordagens fundamentalmente diferentes para manter o estado de login:
- Autenticação baseada em sessão
- Autenticação baseada em JWT
Autenticação Baseada em Sessão
Característica principal: O servidor armazena o estado da sessão, tornando-a stateful (com estado). O ID da sessão é apenas uma chave de referência.
Componentes:
- Cookie: Contém o ID da sessão (string pequena e opaca)
- Armazenamento de Sessão: Armazenamento centralizado (Redis, banco de dados, Memcached)
- Dados da Sessão: ID do usuário, expiração, metadados armazenados do lado do servidor
Autenticação Baseada em JWT
Característica principal: Sem armazenamento do lado do servidor, tornando-a stateless (sem estado). Todos os dados estão no próprio token.
Estrutura do JWT (três partes separadas por pontos):
header.payload.signature
Exemplo:
eyJhbGc... . eyJ1c2Vy... . SflKxwRJ...
[algoritmo] [dados do usuário] [assinatura]
Algoritmos de Assinatura:
- HMAC (HS256): Simétrico – mesma chave para assinar e verificar (mais simples, mais rápido)
- RSA/ECDSA: Assimétrico – chave privada assina, chave pública verifica (mais seguro em sistemas distribuídos)
Padrão de Atualização de Token (Melhor prática para JWT)
Token de Acesso (curto prazo: 15 min) ────┐
├──▶ Requisições regulares à API
Token de Atualização (longo prazo: 7 dias) ────┘
│
└──▶ Enviado apenas ao endpoint /refresh quando o token de acesso expira


