100 % local — seus dados nunca saem do seu navegador

JWT para JSON — leia os claims lá dentro

Decodifique o cabeçalho e o payload de um JWT, sem conferir a assinatura. Você lê exp, iss e os scopes, que costumam explicar a recusa de um token.

Instantâneo Privado Zero cookies
Indentação

Entrada JWT

Saída JSON

O que esta ferramenta faz

Entra um token, saem o cabeçalho e a carga dele em JSON.

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIn0.SflKxwRJSMeKKF2QT4fwpM
{
  "header": {
    "alg": "HS256",
    "typ": "JWT"
  },
  "payload": {
    "sub": "1234567890"
  }
}

Os dois segmentos estão em Base64URL, que é codificação e não cifra: quem tem o token consegue lê-los, aqui ou com três linhas de código. A assinatura não aparece em lugar nenhum porque não há nada a ler nela — ela é uma prova, e provar exige uma chave.

Decodificar não é verificar

A carga acima diz que o sujeito é 1234567890. Dizer isso não prova nada: mude o texto, codifique de novo, e você terá um token que decodifica igualmente limpo e falha na verificação. Esta página não consegue notar a diferença, e nenhum decodificador consegue — é para isso que serve a assinatura.

Então: um decodificador serve para ver o que um token alega; o seu servidor e a sua chave servem para decidir se acredita. Se um dia os dois se contradisserem, quem tem razão é a assinatura.

Três segmentos, e só três

Not a JWT: expected header.payload.signature, found 2 segments

Um JWT compacto tem exatamente três. Dois ou quatro eram decodificados assim mesmo: um token cortado por um copiar e colar voltava com aparência impecável — um defeito encontrado ao escrever esta página e corrigido. Cinco segmentos são outro formato: um JWE, cuja carga é cifrada em vez de codificada, e a mensagem diz isso em vez de falhar na decodificação.

Ler a carga

  • Os identificadores numéricos longos sobrevivem. Um sub de vinte algarismos passa algarismo por algarismo, em vez de ser arredondado para um vizinho por um número JavaScript.
  • exp, iat e nbf são timestamps Unix. Em segundos, não em milissegundos, como manda a especificação. A ferramenta de timestamp deste site os transforma em datas.
  • As alegações são o que o emissor pôs ali. alg, typ, sub, iss e aud são padronizadas; o resto é um acordo entre as suas duas pontas.

Privado por padrão

Tudo é executado localmente no seu navegador com JavaScript. Os seus dados nunca são enviados para um servidor, o que torna a ferramenta segura para conteúdo sensível e funciona offline.

Perguntas frequentes

A assinatura é conferida?
Não, e nenhuma ferramenta de navegador consegue: verificar exige o segredo ou a chave pública, justamente o que não se deve colar em lugar nenhum. Decodificar diz o que o token afirma; verificar diz se você deve acreditar. A carga que você vê aqui pode ter sido digitada por qualquer um — Base64URL é codificação, não proteção. Verifique no servidor, com a sua chave.
Meu token é enviado para algum lugar?
Não. A decodificação acontece no seu navegador e nada sai da página — vale saber, porque um token de produção colado num decodificador on-line é uma credencial entregue a um desconhecido. Ainda assim, prefira um token expirado ou de teste quando puder: esta página não promete nada sobre a máquina em que você está digitando.
Por que o meu token é recusado?
Porque ele não tem três segmentos. Um JWT na forma compacta é `header.payload.signature`, e dois ou quatro segmentos eram decodificados do mesmo jeito: um token cortado por um copiar e colar voltava com cara de são. Cinco segmentos são um JWE — a carga dele é cifrada, não apenas codificada, e ninguém a lê sem a chave. A mensagem agora diz em que caso você está.

Conversores relacionados