CodeKitHub
Português
Ferramentas de codificação

Decodificador JWT

Cole qualquer JWT (JSON Web Token) e veja o seu cabeçalho e a sua carga descodificados e formatados instantaneamente — incluindo se está expirado. Tudo acontece no seu navegador: o token nunca é enviado para lado nenhum e não é realizada qualquer verificação de assinatura (esta ferramenta apenas descodifica, não verifica se o token é genuíno).

Cabeçalho

Carga útil

Decodificado inteiramente no seu navegador — sem verificação de assinatura e o token nunca é enviado para lado nenhum.

O que é esta ferramenta?

Um JWT (JSON Web Token) é uma cadeia de caracteres compacta e segura para URLs, utilizada para transportar reivindicações entre duas partes — mais frequentemente como um token de autenticação após o início de sessão. É composto por três partes separadas por pontos: um cabeçalho (algoritmo e tipo de token), uma carga útil (as reivindicações propriamente ditas — ID do usuário, funções, data de validade, etc.) e uma assinatura (utilizada pelo servidor para verificar se o token não foi adulterado).

O cabeçalho e a carga útil são apenas JSON codificado em Base64URL — não estão encriptados — pelo que qualquer pessoa pode descodificá-los e lê-los sem uma chave secreta. Apenas a assinatura requer uma chave secreta para ser verificada. É exatamente isso que esta ferramenta faz: descodifica as partes legíveis e apresenta-as como JSON formatado, sem tentar verificar a assinatura.

Por que usar?

  • Cabeçalho e carga útil imediatamente legíveis, formatados em JSON — já não é necessário dividir manualmente a cadeia de caracteres nem descodificá-la manualmente de Base64.
  • Verificação automática da validade: se a carga útil tiver uma declaração «exp», esta é convertida numa data legível e marcada como expirada ou válida.
  • Cópia com um clique, separadamente para o cabeçalho ou para o corpo da mensagem.
  • 100% do lado do cliente — o token é descodificado localmente e nunca é transmitido, sendo seguro de utilizar mesmo com tokens provenientes de um sistema de produção.
  • Não foi realizada nem declarada qualquer verificação de assinatura — trata-se de uma ferramenta de depuração/inspeção, não de um validador.

Como usar

  1. Cole o seu JWT na caixa (a sequência completa, incluindo as três partes separadas por pontos).
  2. O cabeçalho e a carga útil são descodificados automaticamente à medida que escreve.
  3. Verifique a linha de validade se o token tiver uma reivindicação «exp» — esta indica a data exata e se o token já expirou.
  4. Clique em «Copiar» por baixo de qualquer uma das caixas para copiar essa secção em formato JSON.

Exemplo

Entrada

eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiIxMjM0IiwibmFtZSI6IkpvaG4gRG9lIiwiZXhwIjoxNzAwMDAwMDAwfQ.dQw4w9WgXcQ

Resultado

Header: {"alg": "HS256"}
Payload: {"sub": "1234", "name": "John Doe", "exp": 1700000000}

A assinatura (terceira parte) nunca é descodificada nem verificada — trata-se de um hash opaco utilizado do lado do servidor para verificar a autenticidade.

Dicas práticas

  • Resolução de erros do tipo «token inválido»: descodifique primeiro a carga útil para verificar a reivindicação «exp» — um token expirado é a causa mais comum, e nem sempre é óbvio apenas a partir da mensagem de erro.
  • Verificar o que o token de uma API de terceiros contém realmente: muitas APIs devolvem um JWT que parece opaco como token de acesso — descodifique-o aqui para ver os âmbitos, o ID do usuário ou a data de validade que a sua integração está efetivamente recebendo.
  • Nunca presuma que um JWT está encriptado: se, durante o desenvolvimento, encontrar dados sensíveis (e-mail, IDs internos) numa carga descodificada, isso é um sinal de que deve transferir esses dados para o lado do servidor, em vez de confiar que o cliente não os irá ler.

Afirmações comuns que se encontram numa carga útil

ReivindicaçãoSignificado
subAssunto — normalmente o ID de usuário que o token representa
expTempo de validade (timestamp Unix) — o token deixa de ser válido após este momento
iatEmitido em — quando o token foi criado
issEmissor — qual o serviço/servidor que emitiu o token
audPúblico-alvo — a que serviço se destina o token
função / funções / âmbitoReivindicações personalizadas — permissões ou funções atribuídas ao usuário (não fazem parte da norma JWT, mas são extremamente comuns)

Perguntas frequentes

Esta ferramenta verifica a assinatura do JWT?

Não. A verificação de uma assinatura requer a chave secreta ou a chave pública utilizada para assinar o token, que apenas o servidor emissor possui. Esta ferramenta apenas descodifica o cabeçalho e a carga útil — as partes legíveis por humanos — para que possa verificar as reivindicações e a data de validade sem necessitar de qualquer chave.

É seguro colar aqui um JWT de produção real?

A descodificação ocorre inteiramente no seu navegador através de JavaScript — o token nunca é enviado para nenhum servidor, incluindo o nosso. Dito isto, trate os tokens como se fossem senhas: não os cole em ferramentas nas quais não confia e evite partilhar capturas de tela de tokens descodificados que contenham informações confidenciais.

Por que é que qualquer pessoa consegue ler o conteúdo do meu JWT sem uma senha?

Por definição — o cabeçalho e a carga útil de um JWT são codificados em Base64URL, não encriptados. A codificação não é sinónimo de segurança; serve apenas para tornar o JSON seguro para transmissão via URL. Nunca coloque informações confidenciais (senhas, números de cartão de crédito) diretamente na carga útil de um JWT — parta do princípio de que qualquer pessoa que tenha o token pode ler o seu conteúdo.

O que significa a indicação «exp» e por que é que é importante?

«exp» é a data de validade do token, expressa como um timestamp Unix (segundos desde 1970). Os servidores rejeitam um JWT assim que este tempo tiver decorrido, obrigando o cliente a voltar a autenticar-se. Esta ferramenta converte-o numa data legível e indica se já expirou, o que é útil para depurar problemas do tipo «por que razão a minha sessão foi encerrada?».

O meu token apresenta um erro de análise de JSON — porquê?

Ou a cadeia de caracteres não é um JWT válido (deve ter exatamente três partes separadas por pontos), ou foi truncada ou alterada — uma causa comum é um token acidentalmente dividido em várias linhas ou a falta de caracteres finais ao ser copiado.

Ferramentas relacionadas