JWT Tokens Explicados: Estrutura, Segurança, Boas Práticas
Os JSON Web Tokens aparecem em praticamente todos os sistemas de autenticação modernos. Aquela longa string no seu cabeçalho Authorization — eyJhbGciOiJIUzI1NiIs... — é um JWT, e compreender o que está lá dentro e como funciona é essencial para construir aplicações seguras.
O que é um JWT?
Um JWT é um formato de token compacto e seguro para URLs que transporta claims (dados) entre duas partes. É autocontido — o próprio token contém a informação necessária para verificar a sua autenticidade e extrair dados do utilizador, sem necessidade de consultar uma base de dados.
Descodifique qualquer JWT instantaneamente com o nosso Codificador/Descodificador JWT. Cole um token e veja o seu cabeçalho, payload e assinatura decompostos.
Estrutura do JWT: Três Partes
Todo JWT tem três partes codificadas em Base64URL separadas por pontos:
header.payload.signature
Cabeçalho
{
"alg": "HS256",
"typ": "JWT"
}
Especifica o algoritmo de assinatura e o tipo de token.
Payload
{
"sub": "user123",
"name": "Alex Chen",
"role": "admin",
"iat": 1708963200,
"exp": 1709049600
}
Contém claims — os dados efetivos. Os claims padrão incluem sub (sujeito), iat (emitido em) e exp (expiração).
Assinatura
Criada ao assinar o cabeçalho e payload codificados com uma chave secreta. Isto previne adulteração — qualquer modificação invalida a assinatura.
Como Funciona a Autenticação JWT
- O utilizador inicia sessão com as suas credenciais
- O servidor cria um JWT com os claims do utilizador e assina-o
- O servidor devolve o JWT ao cliente
- O cliente envia o JWT no cabeçalho Authorization nos pedidos seguintes
- O servidor verifica a assinatura e extrai os claims — sem necessidade de consultar a base de dados
Boas Práticas de Segurança
Verificar Sempre a Assinatura
Nunca confie num JWT sem verificar a sua assinatura. Descodifique o payload com o nosso Descodificador JWT para inspecionar tokens durante o desenvolvimento, mas verifique sempre criptograficamente em produção.
Utilizar Tempos de Expiração Curtos
Os JWTs não podem ser revogados depois de emitidos (ao contrário dos tokens de sessão). Mantenha os tempos de expiração curtos (15-60 minutos) e utilize refresh tokens para sessões mais longas.
Escolher o Algoritmo Correto
- HS256 — HMAC com SHA-256, chave simétrica. Simples, rápido, bom para aplicações de servidor único
- RS256 — RSA com SHA-256, chaves assimétricas. Melhor para sistemas distribuídos onde múltiplos serviços verificam tokens
- Nunca utilizar "none" — A vulnerabilidade
alg: "none"causou brechas reais
Proteger a Chave Secreta
A sua chave de assinatura JWT é a chave mestra do seu sistema de autenticação. Armazene-a de forma segura, rode-a periodicamente e nunca a exponha em código do lado do cliente.
Não Guardar Dados Sensíveis no Payload
Os payloads JWT são codificados em Base64, não encriptados. Qualquer pessoa pode descodificá-los. Nunca inclua palavras-passe, números de cartão de crédito ou segredos.
Erros Comuns com JWT
- Não validar a expiração — Verificar sempre o claim
exp - Guardar JWTs no localStorage — Vulnerável a ataques XSS. Utilizar cookies httpOnly em vez disso
- Tokens sobredimensionados — Os JWTs vão em cada cabeçalho de pedido. Manter os payloads leves
- Não utilizar HTTPS — JWTs enviados por HTTP podem ser intercetados
Perguntas Frequentes
Posso revogar um JWT?
Não diretamente — os JWTs são stateless. As soluções alternativas incluem tempos de expiração curtos, listas negras de tokens ou alterar a chave de assinatura (o que invalida todos os tokens).
Devo utilizar JWTs para sessões?
Os JWTs funcionam bem para autenticação de APIs e microsserviços. Para sessões web tradicionais, sessões do lado do servidor com cookies são frequentemente mais simples e mais seguras.
Qual é a diferença entre JWT e OAuth?
O OAuth é um framework de autorização. O JWT é um formato de token. O OAuth pode utilizar JWTs como tokens de acesso, mas resolvem problemas diferentes.
Recursos Relacionados
- Codificação Base64 Explicada — compreender a codificação que os JWTs utilizam
- Compreender a Segurança JWT — aprofundamento sobre vulnerabilidades
- Codificador/Descodificador JWT — descodificar e criar JWTs instantaneamente
- Gerador de Hash — explorar os algoritmos por detrás das assinaturas JWT