JWT Tokens Explicados: Estrutura, Segurança e Boas Práticas
JSON Web Tokens aparecem em praticamente todo sistema de autenticação moderno. Aquela string longa no seu cabeçalho Authorization — eyJhbGciOiJIUzI1NiIs... — é um JWT, e entender o que há dentro dele 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 carrega claims (dados) entre duas partes. Ele é autocontido — o próprio token contém as informações necessárias para verificar sua autenticidade e extrair dados do usuário, sem precisar consultar um banco de dados.
Decodifique qualquer JWT instantaneamente com nosso Codificador/Decodificador JWT. Cole um token e veja seu header, payload e assinatura detalhados.
Estrutura do JWT: Três Partes
Todo JWT tem três partes codificadas em Base64URL separadas por pontos:
header.payload.signature
Header
{
"alg": "HS256",
"typ": "JWT"
}
Especifica o algoritmo de assinatura e o tipo do token.
Payload
{
"sub": "user123",
"name": "Alex Chen",
"role": "admin",
"iat": 1708963200,
"exp": 1709049600
}
Contém os claims — os dados propriamente ditos. Claims padrão incluem sub (subject/assunto), iat (issued at/emitido em) e exp (expiration/expiração).
Assinatura
Criada ao assinar o header e o payload codificados com uma chave secreta. Isso previne adulteração — qualquer modificação invalida a assinatura.
Como Funciona a Autenticação com JWT
- O usuário faz login com suas credenciais
- O servidor cria um JWT com os claims do usuário e o assina
- O servidor retorna o JWT para o cliente
- O cliente envia o JWT no cabeçalho Authorization nas requisições seguintes
- O servidor verifica a assinatura e extrai os claims — sem necessidade de consulta ao banco de dados
Boas Práticas de Segurança
Sempre Verifique a Assinatura
Nunca confie em um JWT sem verificar sua assinatura. Decodifique o payload com nosso Decodificador JWT para inspecionar tokens durante o desenvolvimento, mas sempre verifique criptograficamente em produção.
Use Tempos de Expiração Curtos
JWTs não podem ser revogados após emitidos (diferentemente de tokens de sessão). Mantenha os tempos de expiração curtos (15-60 minutos) e use refresh tokens para sessões mais longas.
Escolha o Algoritmo Certo
- 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 use "none" — A vulnerabilidade
alg: "none"já causou violações reais de segurança
Proteja a Chave Secreta
Sua chave de assinatura JWT é a chave mestra do seu sistema de autenticação. Armazene-a com segurança, faça rotação periodicamente e nunca a exponha em código do lado do cliente.
Não Armazene Dados Sensíveis no Payload
Payloads JWT são codificados em Base64, não criptografados. Qualquer pessoa pode decodificá-los. Nunca inclua senhas, números de cartão de crédito ou segredos.
Erros Comuns com JWT
- Não validar a expiração — Sempre verifique o claim
exp - Armazenar JWTs no localStorage — Vulnerável a ataques XSS. Use cookies httpOnly em vez disso
- Tokens superdimensionados — JWTs vão em cada cabeçalho de requisição. Mantenha os payloads enxutos
- Não usar HTTPS — JWTs enviados via HTTP podem ser interceptados
Perguntas Frequentes
Posso revogar um JWT?
Não diretamente — JWTs são stateless. Alternativas incluem tempos de expiração curtos, listas de bloqueio de tokens ou alterar a chave de assinatura (o que invalida todos os tokens).
Devo usar JWTs para sessões?
JWTs funcionam bem para autenticação de APIs e microsserviços. Para sessões web tradicionais, sessões no lado do servidor com cookies são frequentemente mais simples e mais seguras.
Qual a diferença entre JWT e OAuth?
OAuth é um framework de autorização. JWT é um formato de token. OAuth pode usar JWTs como access tokens, mas eles resolvem problemas diferentes.
Recursos Relacionados
- Base64 Encoding Explicado — entenda a codificação que os JWTs usam
- Entendendo a Segurança de JWT — mergulho mais profundo nas vulnerabilidades
- Codificador/Decodificador JWT — decodifique e crie JWTs instantaneamente
- Gerador de Hash — explore os algoritmos por trás das assinaturas JWT