Decodificador de JWT

Leia os claims e a expiração de um JWT e confira assinaturas HS256, HS384 e HS512.

Decodificar não é verificar. Qualquer pessoa pode ler ou forjar o conteúdo de um token; só a checagem da assinatura mostra que ele não foi alterado.

Opcional. É usado só nesta página e não é enviado a lugar nenhum.

Cole um token para lê-lo.

O que esta ferramenta faz

Um JSON Web Token (JWT) é a cadeia longa de letras e pontos que muitas APIs e sistemas de login entregam depois que você entra. Esta ferramenta o abre: mostra o cabeçalho e o payload como JSON legível, converte os claims de tempo em datas reais no seu fuso horário e informa se o token expirou. Se o token foi assinado com um segredo compartilhado (HS256, HS384 ou HS512), você pode digitar o segredo para conferir também a assinatura. O token é lido no seu navegador e não é enviado a lugar nenhum, o que importa porque um token válido é uma chave para a conta de alguém.

Decodificar não é verificar

Esta é a coisa mais importante sobre JWT. O cabeçalho e o payload são apenas codificados em Base64URL, não criptografados, então qualquer pessoa com o token consegue lê-los, e qualquer um pode escrever um token com o conteúdo que quiser. Ver "admin": true num token decodificado não prova nada. Só a checagem da assinatura mostra que o token foi criado por quem conhece o segredo ou a chave privada e que não foi alterado depois. Os servidores devem verificar a assinatura em toda requisição e decidir por conta própria quais algoritmos aceitam, nunca confiando no campo alg do token; um token com alg: none não tem assinatura e é um ataque clássico.

As três partes

Um token é formado por três cadeias Base64URL unidas por pontos: cabeçalho.payload.assinatura. No token de exemplo mais conhecido, o cabeçalho é {"alg":"HS256","typ":"JWT"} e o payload é {"sub":"1234567890","name":"John Doe","iat":1516239022}. A assinatura é um HMAC de 32 bytes das duas primeiras partes. Dá para conferir aqui: com o segredo your-256-bit-secret o exemplo é validado e com qualquer outro não. Clique em Exemplo para testar.

Lendo as datas

Três claims guardam tempos, todos como número de segundos desde 1º de janeiro de 1970 UTC:

  • exp é quando o token deixa de valer. A partir desse instante ele deve ser recusado.
  • nbf (not before) é quando ele passa a valer.
  • iat (issued at) é quando foi criado.

A ferramenta mostra cada um como data no seu fuso, como ISO 8601 em UTC e em forma relativa, como "há 3 dias". Com iat 1516239022 e exp 1516242622, as datas são 18 de janeiro de 2018, 01:30:22 e 02:30:22 UTC, ou seja, o token durou uma hora. Um erro comum é gravar exp em milissegundos: aí ele fica dezenas de milhares de anos no futuro. Se um claim não for um número de segundos válido, a ferramenta avisa em vez de mostrar uma data errada.

Conferindo a assinatura

Em HS256, HS384 e HS512 a assinatura é um HMAC com SHA-256, SHA-384 ou SHA-512 sobre cabeçalho.payload, usando o segredo. Digite o segredo, ou marque que ele está em Base64URL se o seu sistema o guarda assim. A conferência usa o Web Crypto do navegador e o segredo não sai da página. Tokens RS256, ES256 e semelhantes usam chave privada e são conferidos com chave pública, o que esta ferramenta não faz; ela avisa em vez de adivinhar.

Problemas comuns

  • "Um JWT tem três partes." Você copiou só um pedaço, ou veio junto uma quebra de linha ou aspas. A ferramenta remove um Bearer no início e os espaços ao redor.
  • Base64URL ou JSON inválido. O token foi cortado ou não é um JWT.
  • Cinco partes. É um token criptografado (JWE) e não pode ser lido sem a chave.
  • Assinatura válida mas "Expirado". A assinatura está certa; o token simplesmente é velho demais. Diferenças de um ou dois minutos entre os relógios dos servidores são normais, por isso muitos sistemas aceitam uma pequena tolerância.

Perguntas frequentes

É seguro colar meu token aqui?

O token é decodificado no seu navegador e não é enviado. Mesmo assim, trate tokens válidos como senhas: prefira um token de teste ou já expirado e nunca compartilhe um válido.

Decodificar um JWT prova que ele é autêntico?

Não. O conteúdo é só codificado, então qualquer um pode lê-lo ou forjá-lo. Apenas a checagem da assinatura com o segredo ou a chave certos mostra que ele é autêntico e não mudou.

Por que não consigo conferir meu token RS256 ou ES256?

Esses algoritmos são assinados com uma chave privada e verificados com a chave pública. Esta ferramenta confere apenas os de segredo compartilhado: HS256, HS384 e HS512.

O que significam exp, iat e nbf?

exp é o horário de expiração, iat é quando o token foi emitido e nbf é o instante antes do qual ele não deve ser aceito. Os três são segundos desde 1º de janeiro de 1970 UTC.