Ir para o conteúdo
UtilDock

Decodificador JWT

Leia as claims de um token e prove sua assinatura · roda nesta aba, nunca é enviado a lugar nenhum

Token

Cole um token para lê-lo

Assinatura

Um JWT é codificado, não criptografado — qualquer um com este token consegue ler tudo acima sem chave nenhuma. Só a verificação da assinatura diz que ele é legítimo e não foi alterado.

Não verificada

Claims

Cole um token no painel Token e suas claims aparecem aqui, em palavras simples.

Cabeçalho

Payload

Como funciona o Decodificador JWT

Um decodificador de JWT que divide um token nas suas três partes, decodifica o cabeçalho e o payload, e lista cada claim em palavras simples — com expiração, “não antes de” e data de emissão mostradas como datas reais em vez de segundos desde 1970. Ele também verifica a assinatura: cole o segredo compartilhado para um algoritmo HS ou uma chave pública para RS, PS ou ES, e a checagem roda na própria WebCrypto do seu navegador. Nem o token nem a chave são enviados a lugar nenhum, e a chave nem sequer é salva neste navegador.

Cole um token — com ou sem o prefixo Bearer — e ele se divide nas suas três partes, coloridas para você ver onde cada uma termina. O cabeçalho e o payload são decodificados em JSON, e as claims são listadas de novo em palavras simples, com exp, nbf e iat mostradas como datas reais e como há quanto tempo passaram ou quanto falta.

Decodificar um JWT não é verificá-lo. As duas primeiras partes são base64url, não criptografia: qualquer um com o token consegue lê-las, e é por isso que um token nunca é lugar para guardar segredo. Ligue Verificar a assinatura e cole o segredo compartilhado para um algoritmo HS, ou uma chave pública para um RS, PS ou ES, e a assinatura é realmente testada — HS256/384/512, RS256/384/512, PS256/384/512 e ES256/384/512, usando a própria WebCrypto do navegador.

A chave que você cola é tratada de forma diferente de qualquer outra entrada deste site: nunca é escrita no localStorage nem restaurada ao recarregar. Nada disso — nem o token nem a chave — é enviado, e não existe servidor que pudesse receber os dois.

Perguntas frequentes

É seguro colar um JWT real neste decodificador?

Sim. O token é decodificado por JavaScript na sua própria aba e não existe backend para onde enviá-lo — desconecte da rede e o decodificador continua funcionando. Com JWTs isso importa mais do que com quase qualquer outro dado: um token é uma credencial viva, e colá-lo num site que o envia para um servidor entrega tudo aquilo que ele concede.

Decodificar um JWT significa que ele é válido?

Não, e a diferença importa. O cabeçalho e o payload são codificados em base64url, não criptografados, então qualquer um com o token consegue lê-los — por isso um JWT nunca é lugar para guardar segredo. Só conferir a assinatura contra a chave certa diz que o token é legítimo, que não foi alterado e que dá para confiar nas suas claims.

Quais algoritmos de assinatura ele consegue verificar?

HS256, HS384 e HS512 com um segredo compartilhado, e RS256/384/512, PS256/384/512 e ES256/384/512 com uma chave pública informada como bloco PEM, JWK avulso ou JWKS inteiro — caso em que o kid do token escolhe a chave. A verificação usa a WebCrypto embutida no navegador, então nenhum material de chave é enviado para lugar algum.

Minha chave ou meu segredo de assinatura ficam guardados?

Não. Todas as outras ferramentas do site salvam sua entrada no localStorage para que um refresh não perca seu trabalho; a chave de verificação é deliberadamente excluída disso. Ela fica na memória, é usada para a checagem e some quando você sai da página.

Por que meu token aparece como expirado?

A claim exp é um NumericDate — segundos desde 1970 — e o decodificador a mostra como data real ao lado de há quanto tempo ela passou. Um token expirado é a causa mais comum de um 401 repentino numa API que funcionava um instante antes. Uma claim nbf no futuro faz o mesmo pela outra ponta.