O que é JWT (JSON Web Token)?
JWT (JSON Web Token) é um padrão aberto (RFC 7519) para transmitir informações de forma segura entre duas partes como um objeto JSON assinado digitalmente. É amplamente usado em sistemas de autenticação e autorização em APIs REST, permitindo que o servidor valide o usuário sem precisar manter estado da sessão.
Um token JWT é composto por três partes separadas por pontos: o Header(algoritmo de assinatura e tipo do token), o Payload(dados do usuário como ID, email, permissões e tempo de expiração) e a Signature(assinatura digital que garante a integridade do token). As duas primeiras partes são Base64URL, e a terceira é uma assinatura HMAC ou RSA.
É importante entender que JWT não é criptografia— o header e payload são apenas codificados em Base64, podendo ser lidos por qualquer pessoa. A segurança reside na signature, que impede a alteração dos dados. Nunca coloque dados verdadeiramente sensíveis (senhas, CPFs) no payload de um JWT.
Casos de Uso e Boas Práticas
- Use JWT para autenticação stateless em APIs REST — o token elimina a necessidade de sessões no servidor.
- Defina sempre um tempo de expiração curto (15-60 min) e use refresh tokens para renovação segura.
- Armazene tokens JWT no lado do cliente usando httpOnly cookies, não em localStorage (vulnerável a XSS).
- Nunca inclua dados sensíveis no payload — ele pode ser lido por qualquer pessoa com o token.
- Use algoritmos modernos como RS256 (RSA) para assinatura em produção, evitando o HMAC com secrets fracas.
- Valide o
iss(emissor),aud(audiência) eexp(expiração) ao receber um token.
Perguntas Frequentes
JWT é seguro? Posso confiar nos dados do payload?
JWT é seguro quando implementado corretamente. A signature garante que os dados não foram alterados. Porém, o payload NÃO é criptografado — qualquer pessoa pode decodificar (como esta ferramenta faz). A segurança está em impedir a falsificação, não em esconder os dados.
Qual a diferença entre JWT e session token tradicional?
Session tokens são armazenados no servidor (stateful), enquanto JWT contém os dados do usuário no próprio token (stateless). JWT é ideal para APIs e microsserviços porque não precisa de um banco de dados centralizado para validar sessões. Porém, revogar um JWT antes da expiração é mais difícil que invalidar uma sessão.
Onde devo armazenar o JWT no navegador?
A opção mais segura são cookies httpOnly + Secure + SameSite, que protegem contra ataques XSS. Evite armazenar em localStorage ou sessionStorage, que são acessíveis por JavaScript e vulneráveis a XSS. Se usar armazenamento no lado do cliente, implemente proteção contra XSS rigorosa.
O que significa "exp" e "iat" no payload?
exp (expiration time) é o timestamp Unix de quando o token expira. iat (issued at) é o timestamp de quando o token foi criado. Esses claims são essenciais para controlar a validade do token e implementar renovação automática via refresh tokens.
Posso revogar um JWT antes da expiração?
JWTs por padrão não suportam revogação — eles são válidos até expirar. Para revogação, use uma denylist no servidor (Redis com TTL), use tokens de curta duração + refresh tokens (revogue o refresh), ou use o endpoint de logout para invalidar o token no cliente.
Esta ferramenta decodifica (não descriptografa) tokens JWT. A decodificação Base64 é reversível e não valida a signature. Nunca confie em dados JWT recebidos de fontes desconhecidas. Para validação completa, use bibliotecas como jsonwebtoken (Node.js) ou jwt.io.
