Decodificador e verificador de JWT
Decodifique JSON Web Tokens e verifique assinaturas HS/RS/ES/PS — tudo no seu navegador
—
—
O que é um decodificador de JWT?
Um JWT (JSON Web Token) é um token de três partes — cabeçalho, payload e assinatura — usado para autenticação e autorização em apps web modernas. O payload parece texto aleatório até você decodificá-lo, que é exatamente o que esta ferramenta faz. Ela transforma o cabeçalho e o payload em JSON legível e bem formatado, explica os claims registrados como exp, nbf e iat em linguagem clara com datas reais, e mostra se o token está expirado, ativo ou ainda não válido. Ela também verifica assinaturas: HS256/384/512 com um segredo compartilhado, e RS/PS/ES com uma chave pública PEM, tudo via Web Crypto dentro do navegador. Para desenvolvedores que depuram fluxos de autenticação, isso substitui o hábito de colar tokens de produção em sites de terceiros.
O que esta ferramenta faz
- 📖 Decodificar cabeçalho e payload em JSON bem formatado
- 🏷️ Explicar os claims registrados em linguagem clara
- ⏳ exp, nbf e iat mostrados como data exata mais tempo relativo
- ✅ Verificação de assinatura HS256/384/512 com segredo
- 🔏 Verificação de assinatura RS/PS/ES com chave pública PEM
- 🚦 Selo de status: expirado, ativo ou ainda não válido
- ⚠️ Aviso quando o alg do cabeçalho é none, ou seja, token sem segurança
Quando usar
- Para depurar um erro 401 no seu fluxo de login
- Para descobrir por que um token parou de funcionar de repente
- Para verificar um token de um provedor de identidade terceiro antes de confiar nele
- Para inspecionar os claims dentro de um token de atualização
Privacidade: tokens e chaves são processados inteiramente no seu navegador e nunca enviados, então colar credenciais reais de produção é seguro.
O que são, na verdade, os três segmentos
Um JWT é composto por três segmentos codificados em base64url, separados por pontos:
- O cabeçalho especifica o algoritmo; o payload contém as claims; e a assinatura vincula ambos usando um segredo ou uma chave.
- Nada no cabeçalho ou no payload é criptografado — qualquer pessoa que possua o token pode ler todas as claims. Isso é intencional: um JWT é um contêiner assinado, não um mecanismo seguro por si só.
- A verificação exige a chave de assinatura e deve ocorrer no seu servidor; esta página apenas decodifica localmente, permitindo que você inspecione as claims sem precisar colar tokens em nenhum serviço remoto.
Decodificar não é verificar
Claims viram datas reais
O cabeçalho e o payload aparecem como JSON legível enquanto claims registrados como exp, nbf e iat viram datas reais, com um veredito claro: expirado, ativo ou ainda não válido.
Verificação HS, RS, PS e ES
Verifique HS256/384/512 contra um segredo compartilhado em texto simples ou base64, e tokens RS, PS ou ES contra uma chave pública PEM, tudo com Web Crypto dentro da página.
Tokens malformados explicados
Problemas estruturais são relatados com precisão — ponto faltando, cabeçalho inválido, payload ilegível — e tokens que alegam o algoritmo none são marcados em vez de confiados.
Perguntas frequentes
Meu token é enviado para um servidor?⌄
Não. A decodificação e a verificação de assinatura acontecem inteiramente no seu navegador com a Web Crypto API. Seu token, segredo e chaves nunca saem do dispositivo, então você pode inspecionar tokens de produção com segurança.
Quais algoritmos de assinatura você pode verificar?⌄
HS256/384/512 com um segredo compartilhado (UTF-8 ou base64url) e as famílias assimétricas RS256/384/512, PS256/384/512 e ES256/384/512 colando a chave pública PEM. Para tokens assimétricos você só precisa da chave pública, nunca da privada.
Um JWT não é criptografado — o que isso significa?⌄
Um JWT padrão é apenas codificado em base64url e assinado, não criptografado, então qualquer um pode ler seu payload. Nunca coloque segredos em um JWT. A assinatura só prova que o token não foi adulterado por alguém sem a chave.
Aparece 'assinatura inválida' — o token foi falsificado?⌄
Geralmente, uma das três causas chatas: o token foi assinado com o segredo de um ambiente diferente; o emissor rotaciona as chaves e a sua está desatualizada; ou o algoritmo no cabeçalho não corresponde ao que seu verificador espera (o famoso truque alg=none). Decodifique o cabeçalho aqui primeiro e, em seguida, compare-o com a chave que seu backend realmente usa.