Decodificador de JWT

Decodifique o header e o payload de um token JWT.

Este token não teve a assinatura verificada — a verificação exigiria a chave secreta do emissor, que este site nunca deve receber.

Escopo: decodifica, não verifica assinatura

Separa as três partes pelo ponto e decodifica header e payload de Base64URL para JSON, sem recalcular a assinatura — isso exigiria a chave secreta (HS256) ou a chave pública (RS256) do emissor, e nenhuma ferramenta de terceiros deveria pedir esse segredo. Todo o processamento roda no navegador; nenhuma parte do token é enviada a um servidor.

Claims comuns no payload

Os campos de data conhecidos (exp, iat, nbf) são convertidos automaticamente para o formato local. Como header e payload são apenas codificados (não criptografados), qualquer um com o token consegue lê-los — evite incluir dados sensíveis no payload ou compartilhar tokens de produção.

As três partes do token

Um JWS — o formato de JWT que se vê no dia a dia — tem três blocos separados por ponto:

Os três blocos são codificados em Base64URL, uma variante do Base64 que troca + e / por - e _ e dispensa o preenchimento com =, para que o token possa trafegar em URLs sem escape adicional. Para decodificar strings Base64 comuns, use o conversor de Base64.

Codificação não é criptografia. Qualquer pessoa com o token lê o payload inteiro — é por isso que colocar CPF, e-mail, telefone ou qualquer dado sensível ali é um problema, ainda que o tráfego seja HTTPS. O token costuma ficar guardado no navegador, aparece em logs e é enviado a cada requisição.

Depurando os erros mais comuns

A maior parte dos problemas de autenticação com JWT se resolve olhando três claims:

Se as três claims estão corretas e a validação ainda falha, o problema está na assinatura — chave errada, algoritmo diferente do esperado ou kid apontando para uma chave já rotacionada.

Por que esta ferramenta não verifica a assinatura

Verificar exigiria a chave secreta, no caso de HS256, ou a chave pública do emissor, no caso de RS256 e ES256. Nenhuma ferramenta de terceiros deveria pedir o segredo de assinatura da sua aplicação — quem tem essa chave consegue forjar tokens válidos para qualquer usuário.

Vale registrar uma vulnerabilidade clássica relacionada: o algoritmo none. A especificação prevê tokens sem assinatura, e implementações antigas aceitavam um token cujo header declarava "alg": "none", permitindo que qualquer um forjasse credenciais. A defesa é o servidor fixar o algoritmo esperado em vez de confiar no que o header informa. Se você encontrar none ao decodificar um token de produção, é um achado grave.

Todo o processamento aqui roda no navegador e nenhuma parte do token é enviada pela rede. Ainda assim, a prática recomendada é usar tokens de teste ao depurar — um token de produção colado em qualquer lugar é um token que passou por um canal a mais do que precisava.

Perguntas frequentes

Por que a assinatura não é verificada?

Verificar a assinatura exigiria a chave secreta (HS256) ou a chave pública (RS256) do sistema que emitiu o token — um segredo que não deveria ser digitado em site nenhum de terceiros. Por isso a ferramenta se limita a decodificar header e payload, que já são publicamente legíveis, sem processar chaves.

Isso verifica se o token já expirou?

Não automaticamente. A claim "exp" é decodificada e exibida em formato legível, mas comparar essa data com o momento atual fica por sua conta — a ferramenta não valida o token perante nenhum servidor.

Meus dados são enviados para algum servidor?

Não, a decodificação roda inteiramente no navegador. Ainda assim, como o payload não é criptografado (qualquer pessoa com o token consegue lê-lo), evite compartilhar tokens de produção em prints ou com terceiros.

Dá para esconder informação dentro de um JWT?

Não em um JWS, que é o formato comum: header e payload são apenas codificados em Base64URL e qualquer um os lê. Existe o JWE, um formato distinto em que o conteúdo é de fato criptografado, mas ele é bem menos usado e não é o que se vê na maioria das APIs.

O que significa "alg": "none" no header?

Significa token sem assinatura. A especificação permite, mas em produção é um sinal de alerta grave: implementações que confiam no algoritmo declarado no header aceitam tokens forjados. O servidor deve fixar o algoritmo esperado em vez de ler esse campo.

Por que o token expira em poucos minutos?

É intencional. Tokens de acesso costumam ter vida curta justamente para limitar o estrago caso vazem, e a renovação é feita por um refresh token de vida longa, guardado com proteção maior e revogável no servidor.