JWT é onipresente em autenticação de aplicações web e APIs, mas é cercado de mal-entendidos, principalmente sobre segurança. Entender suas três partes e a diferença entre decodificar e validar evita erros perigosos. Neste guia você vê o que é um JWT, sua estrutura, os riscos e por que não colar tokens sensíveis em qualquer lugar. Para inspecionar um token, use o decodificador de JWT.
Resposta rápida
- JWT é um token compacto e verificável com 3 partes: header.payload.signature.
- Header e payload são só codificados em Base64URL, não criptografados: qualquer um lê o conteúdo.
- Decodificar ≠ validar: validar exige conferir a assinatura com a chave, mais expiração e emissor.
- Nunca cole tokens reais em sites desconhecidos nem coloque dados sensíveis no payload.
O que é JWT
JWT (JSON Web Token) é um padrão aberto para transmitir informações entre partes de forma compacta e verificável. É muito usado em autenticação: depois do login, o servidor entrega um token que o cliente envia em cada requisição para provar quem é, sem precisar consultar a sessão a cada vez.
As três partes
Um JWT é formado por três blocos separados por pontos:
- Header: indica o tipo (JWT) e o algoritmo de assinatura (por exemplo, HS256 ou RS256).
- Payload: contém os claims, ou seja, os dados, como id do usuário, permissões, emissor (iss), emissão (iat) e expiração (exp).
- Signature: a assinatura, gerada a partir do header, do payload e de uma chave, que garante que o token não foi adulterado.
Visualmente, um JWT tem este formato (três blocos separados por pontos):
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9. ← header
eyJzdWIiOiIxMjM0IiwibmFtZSI6IkFuYSJ9. ← payload
SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV... ← signatureHeader e payload são apenas codificados em Base64URL, não criptografados. Para entender essa codificação, veja o codificador Base64.
Os dados dentro do payload são os claims. Alguns são padronizados (registered claims):
| Claim | Significado |
|---|---|
| iss | Emissor do token (issuer) |
| sub | Sujeito (em geral o id do usuário) |
| aud | Destinatário do token (audience) |
| iat | Data de emissão (issued at) |
| exp | Data de expiração (expiration) |
Decodificar não é validar
Esse é o ponto mais importante. Decodificar é só ler o header e o payload, o que qualquer pessoa com o token consegue fazer, sem chave nenhuma. Validar é verificar a assinatura com a chave correta e checar a expiração e o emissor, para ter certeza de que o token é autêntico e ainda vale. A validação deve ocorrer no servidor, com a chave secreta ou pública apropriada. Uma ferramenta de decodificação mostra o conteúdo, mas não prova autenticidade.
Riscos de segurança
- O payload não é secreto: nunca coloque senha ou dado sensível nele.
- Um token de acesso válido em mãos erradas equivale a estar logado: trate como credencial.
- Tokens sem expiração curta aumentam o risco em caso de vazamento.
- Aceitar o algoritmo none ou confiar no algoritmo declarado pelo token são falhas conhecidas (veja as recomendações da OWASP).
Por que não colar tokens sensíveis online
Como o payload é legível e um token válido funciona como senha, colar um JWT real de produção em um site desconhecido é arriscado. Use ferramentas que processam localmente no navegador, como o decodificador de JWT do ValorFinal, que não envia o token a nenhum servidor. Para entender o JSON que está dentro do payload, veja o guia o que é JSON; para gerar hashes, o gerador de hash.
Limitações deste guia
O conteúdo é educativo e não cobre todas as nuances de implementação segura de autenticação. Para sistemas em produção, siga as recomendações oficiais (RFC 7519 e OWASP) e, idealmente, use bibliotecas consolidadas em vez de implementar do zero. Veja também como validamos os cálculos.
Fontes oficiais
- RFC 7519: especificação do JSON Web Token (JWT).
- OWASP (JWT Cheat Sheet): boas práticas de segurança.
- MDN (Web Crypto API): criptografia no navegador.
Conclusão
Entender que um JWT tem header, payload e assinatura, e que decodificar não é validar, evita os erros mais perigosos de autenticação. O payload é legível, então nunca guarde segredos nele nem cole tokens reais em sites desconhecidos. Para inspecionar um token com segurança, use o decodificador de JWT, entenda o JSON do payload e a codificação Base64, e conheça as demais ferramentas de tecnologia.
