Também disponível em: English · Español · Français · العربية
Descodificador de JWT online
Cola um JSON Web Token e vê o header, o payload e o estado de validade em segundos, sem que o token saia do teu navegador.
O que é um descodificador de JWT?
Um JSON Web Token (JWT) é uma forma compacta de representar um conjunto de afirmações — claims — sobre alguém ou alguma coisa, assinada e codificada em base64url. Na forma mais comum, um JWS compacto, é uma única linha de texto com três partes separadas por pontos: o header, o payload e a assinatura. Cada uma das duas primeiras partes é um objeto JSON codificado em base64url; a terceira é a prova criptográfica de que o conteúdo não foi alterado desde que foi assinado.
Descodificar um JWT é inverter essa codificação: separar as três partes pelos pontos, converter o base64url de volta a texto e interpretar esse texto como JSON. É uma operação puramente mecânica — não depende de nenhuma chave nem segredo. O payload pode conter sete claims registados no RFC 7519 (iss, sub, aud, exp, nbf, iat, jti); três deles guardam datas como NumericDate, ou seja, segundos — não milissegundos — desde 1970-01-01 UTC, um detalhe que confunde muita gente habituada ao JavaScript, que normalmente trabalha em milissegundos. Esta página converte-os para uma data UTC legível na própria tabela.
Como se usa
- Cola o teu JWT. Assim que colas um JSON Web Token na caixa de texto, a página descodifica-o de imediato — não há botão para premir, nem envio para servidor nenhum.
- Lê o header e o payload. Acima da caixa aparecem o algoritmo (alg) — sinalizado como não protegido sempre que for none, porque esse token não leva assinatura nenhuma —, o tipo (typ) e o estado: expirado, ainda não válido ou nenhum dos dois. Mais abaixo, uma tabela mostra cada claim do payload, o seu valor e o que significa, com as datas convertidas para UTC legível quando aplicável.
- Copia o que precisares. Cada vista JSON tem o seu próprio botão de copiar, há um token de exemplo para experimentares a ferramenta sem teres um à mão, e um botão para limpar tudo quando terminares. O segmento de assinatura também é mostrado, mas só para leitura — nunca é verificado.
Os limites honestos
A distinção mais importante desta página está no nome: descodifica, não verifica. O próprio RFC 7519 separa as duas operações — recuperar os bytes do header e do payload é uma questão de base64url e JSON, enquanto confirmar que a assinatura é autêntica exige a chave ou o segredo com que o token foi assinado. Um token descodificado mostra o que ele afirma sobre si próprio, não se essa afirmação é legítima. Qualquer pessoa com um editor de texto consegue fabricar um JWT que diga “admin”: true — o que falta para o tornar perigoso não é sintaxe, é uma assinatura válida, e essa é precisamente a parte que esta ferramenta não confirma.
Não há aqui um campo para colar o segredo, e isso é deliberado. Verificar um token assinado com HS256 exigiria colar essa chave secreta numa página web — e o segredo de assinatura é justamente a única coisa que nunca deve ser colada em lado nenhum, muito menos numa ferramenta que não controlas. Em vez de acrescentar esse campo e pedir-te para confiares nele, esta página recusa a funcionalidade: preferimos um descodificador honesto a um verificador que te pede para arriscares o teu segredo.
Mesmo dentro do que faz, há limites a conhecer. O estado de expiração é calculado comparando o relógio do teu próprio dispositivo com o que o token afirma nos claims exp e nbf — se o teu relógio estiver errado, ou se quem emitiu o token usar outra tolerância, o resultado pode divergir do que uma aplicação real decidiria. A página também não confirma que aud ou iss correspondem ao que a tua aplicação espera, não sabe se o token foi entretanto revogado, e não consegue decifrar um token de cinco partes: esse é um JWE, está cifrado, e sem a chave de decifragem — que esta ferramenta nunca pede — não há como ler o conteúdo.
O descodificador foi confrontado com a biblioteca jose em 400 tokens gerados aleatoriamente mais um conjunto de casos-limite escritos à mão, num total de 3073 verificações, todas corretas; essa biblioteca foi depois removida do projeto, por isso o site não a carrega nem depende dela.
Porque é gratuito?
Esta página é HTML e JavaScript estáticos: não há conta para criares, não há ficheiro nenhum para enviares — o token fica sempre no teu navegador — e não há marca de água nem limite de utilizações escondido algures. Sem upload e sem servidor a processar nada, correr esta ferramenta não custa mais do que servir uma página comum, e é por isso que continua gratuita.