O que é JWT e como funciona?
Entenda a estrutura de um JSON Web Token, como funciona a assinatura, o que vai no payload, e quando usar JWT em vez de sessões.
JWT (JSON Web Token) é um padrão aberto (RFC 7519) para transmitir informações de forma compacta e verificável entre partes. Um JWT é uma string dividida em três partes separadas por pontos: header, payload e signature. É amplamente usado para autenticação e troca de informações em APIs REST.
A estrutura de um JWT
Cada parte do JWT é codificada em Base64URL (não criptografada). Isso significa que o conteúdo do header e do payload pode ser lido por qualquer pessoa — apenas a assinatura garante a integridade.
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9. ← Header
eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6Ikpv. ← Payload
SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c ← Signature- Header: algoritmo de assinatura (HS256, RS256) e tipo do token ("JWT")
- Payload: as "claims" — dados do usuário (sub, name, role) + metadados (iat, exp)
- Signature: HMAC ou RSA sobre header+payload com a chave secreta
HS256 vs RS256: qual algoritmo usar?
HS256 (HMAC-SHA256) usa uma chave simétrica — o mesmo segredo assina e verifica. É simples mas exige que todos os serviços que verificam o token conheçam o segredo. RS256 usa um par de chaves assimétricas: a chave privada assina, e a chave pública (distribuível) verifica. Para arquiteturas de microsserviços onde vários serviços verificam tokens, RS256 é a escolha mais segura.
Claims padrão importantes
- sub (subject): identificador do usuário
- iat (issued at): timestamp de emissão
- exp (expiration): timestamp de expiração — sempre defina
- aud (audience): quem pode consumir o token
- iss (issuer): quem emitiu o token
JWT vs Sessões: quando usar cada um?
Sessões armazenam estado no servidor — o servidor precisa consultar o banco para validar cada requisição. JWTs são stateless — toda a informação necessária está no token, sem consulta ao banco. Isso torna JWTs ideais para APIs distribuídas e microsserviços.
Por outro lado, JWTs não podem ser invalidados antes da expiração sem uma blacklist (que reintroduz estado). Para aplicações onde logout imediato e revogação de sessão são críticos, sessões com armazenamento no servidor ainda são mais adequadas.
Use o Decodificador de JWT do UtilDev para inspecionar o header e payload de qualquer token JWT diretamente no navegador, sem enviar dados a servidores externos.