Decodificador JWT
Cole um JSON Web Token e leia o header e o payload como JSON formatado, com os horários de expiração e de emissão exibidos como datas e uma indicação de que o token está válido ou não neste momento. A decodificação acontece inteiramente no seu navegador, o que faz diferença quando o token é uma credencial ativa.
0 caracteres · 0 palavras · 0 linhas
0 caracteres · 0 palavras · 0 linhas
Funciona inteiramente nesta aba do navegador. Seu texto nunca é enviado nem armazenado.
Claims registradas
Os sete nomes de claim definidos na RFC 7519 §4.1. Todas são opcionais; os horários são segundos desde 1970-01-01 UTC.
| Claim | Significado |
|---|---|
iss | Emissor: quem criou e assinou o token |
sub | Assunto: o usuário ou a entidade a que o token se refere |
aud | Público: a quem o token se destina |
exp | Expiração: rejeitar o token depois deste momento |
nbf | Não antes de: rejeitar o token antes deste momento |
iat | Emitido em: quando o token foi criado |
jti | ID do JWT: identificador único, usado para evitar reutilização (replay) |
Valores comuns de alg
| Valor de alg | Significado |
|---|---|
HS256 | HMAC com SHA-256; um único segredo compartilhado assina e verifica |
RS256 | Assinatura RSA PKCS#1 v1.5 com SHA-256; a chave privada assina, a pública verifica |
PS256 | RSA-PSS com SHA-256 |
ES256 | ECDSA na curva P-256 com SHA-256; assinaturas curtas |
EdDSA | Assinaturas Ed25519 ou Ed448 |
none | Token sem assinatura; os servidores devem rejeitá-lo |
O que há dentro de um JSON Web Token
O JWT é definido na RFC 7519 (maio de 2015), que sugere pronunciá-lo como a palavra inglesa "jot". A forma assinada mais comum são três strings Base64url unidas por pontos: header.payload.signature. O header indica o algoritmo de assinatura em alg, como HS256 ou RS256, e muitas vezes um ID de chave em kid. O payload contém as claims, campos JSON como sub (o usuário), iss (o emissor), aud (o público-alvo) e exp, nbf e iat, que são horários em segundos desde 1º de janeiro de 1970 UTC. O decodificador converte essas três para o seu horário local e para ISO 8601, e informa se o token expirou, ainda não é válido ou está dentro do período de validade.
Base64url é uma codificação, não uma criptografia, então qualquer pessoa com um token pode ler o payload exatamente como esta página faz. Nunca coloque senhas, números de cartão ou outros segredos nas claims. Um token com cinco partes separadas por pontos é um JWE, um token criptografado; o conteúdo não pode ser lido sem a chave, e o decodificador avisa isso. Um "Bearer " no início, copiado de um cabeçalho Authorization, é removido automaticamente.
Por que a assinatura não é verificada aqui
A assinatura prova que o header e o payload foram produzidos por quem tem a chave e não foram alterados desde então. Para conferi-la é preciso dessa chave: o segredo compartilhado nos algoritmos HMAC como o HS256, ou a chave pública do emissor no RS256, ES256 ou EdDSA. Colar o segredo de assinatura de produção em qualquer página web é má ideia, e um decodificador que fingisse atestar um token sem a chave daria uma falsa sensação de segurança, então esta ferramenta mostra a assinatura, mas não a verifica. Trate o que você vê como uma afirmação feita pelo token, não como um fato.
A verificação deve ser feita no seu servidor, com uma biblioteca mantida e o algoritmo esperado fixado. Dois erros históricos explicam o motivo: aceitar alg "none", que permite a qualquer pessoa forjar um token sem assinatura, e a confusão de algoritmo, em que um servidor que espera RS256 é induzido a conferir uma assinatura HS256 usando a chave pública como segredo HMAC. O decodificador serve para depuração: ver quais claims um provedor emite, notar um público-alvo errado ou descobrir que uma sessão falhou porque o exp passou há um minuto. Para ler os segmentos Base64url em estado bruto, use o decodificador de Base64.
Perguntas frequentes
- É seguro colar um token de acesso real em um decodificador JWT?
- Nesta página o token nunca sai do seu navegador. Ainda assim, um token válido funciona como uma senha até expirar, então prefira tokens expirados ou de teste e não deixe os ativos em capturas de tela e conversas.
- Por que meu token aparece como expirado se acabou de ser emitido?
- Verifique primeiro o relógio do seu dispositivo. Alguns emissores dão aos tokens de acesso uma vida de apenas alguns minutos, e um token copiado de um log pode ser mais antigo do que parece. Um exp escrito em milissegundos em vez de segundos faz o contrário e cai milhares de anos no futuro.
- Alguém pode alterar o payload do meu JWT?
- Elas podem editar e recodificar o token, mas a assinatura deixará de corresponder. Um servidor que verifica assinaturas com a chave e o algoritmo corretos rejeita o token alterado.
- Qual é a diferença entre JWS e JWE?
- Um JWS (RFC 7515) é assinado, tem três partes e qualquer pessoa pode lê-lo. Um JWE (RFC 7516) é criptografado, tem cinco partes e só quem tem a chave pode ler o payload.
- Fazer logout invalida um JWT?
- Não por si só. Um JWT assinado continua válido até o exp, a menos que o servidor mantenha uma lista de bloqueio ou consulte um registro de sessão, e por isso os tokens de acesso costumam ter vida curta.