Como usar o decodificador de JWT
- Cole um JSON Web Token, a string longa que normalmente vem depois de
Authorization: Bearer. - O cabeçalho e o payload são decodificados e exibidos como JSON formatado.
- Claims de tempo como
exp,iatenbfsão convertidas em datas legíveis, para você ver de relance se o token já expirou.
Anatomia de um JWT
Um JSON Web Token, especificado na RFC 7519, é uma forma compacta de transmitir claims entre as partes. A forma assinada mais comum (JWS) tem três partes separadas por pontos:
header.payload.signature
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjMifQ.<signature>
- Cabeçalho (header): JSON que descreve o token, principalmente o algoritmo de assinatura.
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9decodifica para{"alg":"HS256","typ":"JWT"}. - Payload: JSON com as claims, as afirmações sobre o usuário ou a sessão.
- Assinatura (signature): calculada sobre o cabeçalho e o payload codificados, com um segredo (HMAC, por exemplo HS256) ou uma chave privada (por exemplo RS256, ES256).
Cada parte é codificada em base64url, o alfabeto Base64 seguro para URLs, sem preenchimento. É por isso que os tokens contêm - e _ e que os JWTs quase sempre começam com eyJ: é assim que fica codificado o {" de abertura de um objeto JSON quando vem em seguida um nome de chave típico em minúsculas. Você pode explorar a própria codificação com o codificador Base64.
Claims registradas
| Claim | Nome | Significado |
|---|---|---|
iss | Issuer (emissor) | Quem criou e assinou o token. |
sub | Subject (assunto) | A quem o token se refere, normalmente um ID de usuário. |
aud | Audience (público) | Para qual ou quais serviços o token se destina. |
exp | Expiration time (expiração) | Timestamp Unix a partir do qual o token deve ser rejeitado. |
nbf | Not before (não antes de) | Timestamp Unix antes do qual o token ainda não é válido. |
iat | Issued at (emitido em) | Timestamp Unix de quando o token foi criado. |
jti | JWT ID | Identificador único, útil para impedir a reutilização. |
Todas elas são opcionais na RFC 7519; cada aplicação decide quais exige. As claims de tempo são em segundos, e não em milissegundos; o conversor de timestamp Unix explica a diferença.
Armadilhas comuns
Decodificar não é verificar
Qualquer pessoa pode decodificar um JWT; é exatamente isso que esta ferramenta faz. Decodificar mostra o que um token afirma, e não se essas afirmações são verdadeiras. O servidor precisa verificar a assinatura com a chave correta e conferir exp, nbf, iss e aud antes de confiar em qualquer coisa do payload.
O payload não é secreto
Um JWT assinado pode ser lido por qualquer pessoa que o tenha. Não coloque no payload senhas, dados pessoais que você não exporia ao cliente nem segredos internos. Se o conteúdo precisar ser confidencial, use um JWT criptografado (JWE) ou mantenha os dados no servidor.
alg: none e confusão de algoritmo
As especificações JOSE definem um valor "alg": "none" para tokens não protegidos, com assinatura vazia. Uma biblioteca que obedece ao cabeçalho do próprio token pode aceitar um token forjado como este:
{"alg": "none", "typ": "JWT"}
{"sub": "admin"}
(assinatura vazia)
Um ataque relacionado muda um token de RS256 para HS256, de modo que a chave pública seja usada indevidamente como segredo HMAC. A defesa para os dois é a mesma: configure no servidor os algoritmos permitidos e nunca deixe o token escolher.
Dicas
- Use tokens de acesso de curta duração e refresh tokens para sessões mais longas.
- Aceite uma pequena diferença entre relógios (clock skew; por exemplo, um minuto) ao verificar
expenbfentre servidores. - Use uma biblioteca de JWT bem mantida em vez de analisar e verificar tokens manualmente.
Perguntas frequentes
Esta ferramenta consegue verificar a assinatura de um JWT?
A verificação exige o segredo ou a chave pública do emissor e precisa acontecer no seu backend. Esta ferramenta serve para inspecionar o cabeçalho e as claims de um token durante a depuração.
Por que meu token aparece como expirado?
A claim exp é anterior ao horário atual do seu dispositivo. Confira se o seu relógio está certo e se o emissor escreveu o exp em segundos.
Os JWTs são criptografados?
Os JWTs assinados (JWS), a grande maioria dos que estão em uso, são apenas codificados e assinados, então qualquer pessoa pode lê-los. Os JWTs criptografados (JWE) têm cinco partes em vez de três.
É seguro colar meu token aqui?
A decodificação acontece localmente e nada é transmitido. Como regra geral, evite colar tokens de produção ativos em qualquer ferramenta online que você não tenha analisado.
Atualizado