Decodificador JWT

Decodifique um JSON Web Token e leia o cabeçalho e as claims em JSON legível. Apenas decodifica: não verifica a assinatura.

Seu token é decodificado inteiramente no seu navegador. Ele nunca é enviado a lugar nenhum.

A decodificação é apenas para inspeção. A assinatura não é verificada aqui.

O que há dentro de um JWT?

Um JSON Web Token (JWT) é uma forma compacta e autocontida de passar claims entre partes. Ele empacota um cabeçalho, uma carga e uma assinatura em três strings base64url separadas por pontos, e —como cada peça está codificada em claro— você pode abri-lo e ler o que há dentro sem nenhuma chave. Esta ferramenta faz exatamente isso: divide o seu token e imprime as duas metades com formatação.

Cabeçalho, carga, assinatura
O primeiro segmento (cabeçalho) declara o tipo do token ("JWT") e o algoritmo de assinatura (HS256, RS256, ES256…). O segundo (carga) contém as claims: as padrão como sub (sujeito), iss (emissor), exp (expiração), iat (data de emissão), além das personalizadas como id do usuário e cargos. O terceiro (assinatura) é a assinatura HMAC ou assimétrica sobre os dois primeiros, que é o que realmente protege o token.
Por que a decodificação não precisa de chave
Base64url é uma codificação, não uma cifra: não oculta nada. A proteção criptográfica é a assinatura, e verificá-la exige a chave secreta do emissor (HMAC) ou a chave pública (RSA/EC). Por isso ler um token é gratuito para qualquer um, mas forjá-lo ou alterá-lo não é: qualquer mudança no cabeçalho ou na carga invalida a assinatura.
Quando a verificação importa
Sempre que o código toma decisões com base em um token —autenticando um usuário, concedendo acesso, confiando em um exp— ele deve verificar a assinatura com a chave do emissor, conferir o algoritmo contra uma lista de permitidos e validar exp, nbf, iss e aud. Decodificar, como faz esta ferramenta, nunca é mais do que uma ajuda de depuração.

Perguntas frequentes

Quais são as três partes de um JWT?

Um JWT é três segmentos codificados em base64url unidos por pontos: cabeçalho, carga e assinatura. O cabeçalho indica como o token foi assinado (algoritmo como HS256 ou RS256, além do tipo). A carga traz as claims — id do usuário, cargos, expiração (exp), emissor (iss) e assim por diante. A assinatura é a prova criptográfica de que as outras duas partes não foram adulteradas.

Por que consigo decodificar um JWT sem a chave secreta?

Decodificar e verificar são operações diferentes. O cabeçalho e a carga são base64url puro — não se aplica criptografia a eles, apenas à assinatura. Qualquer pessoa pode decodificar um JWT para ler seu conteúdo; só quem tem a chave de assinatura (ou a chave pública, para algoritmos assimétricos) pode verificar se ele é genuíno e intacto.

Quando você realmente precisa verificar um JWT?

Sempre que um sistema age sobre um token: uma API checando um token de autenticação, um servidor validando uma sessão, ou código confiando em uma claim exp. A verificação confere a assinatura contra a chave do emissor, confirma que o algoritmo é o esperado e valida a expiração, o emissor e a audiência. Nunca confie no conteúdo de um JWT até que sua assinatura seja verificada pela parte que o emitiu.

Qual é a diferença entre um JWT e um cookie de sessão?

Um cookie de sessão é um manipulador opaco: o servidor guarda os dados reais da sessão e o cookie apenas faz referência a eles. Um JWT é autocontido: todas as claims viajam com o token, então um serviço sem estado pode checá-lo sem consultar o banco de dados. O preço é que um JWT não pode ser revogado antes de expirar — é preciso esperar ou manter uma lista de bloqueio.

Meu token é enviado para algum lugar quando uso esta ferramenta?

Não. O token é decodificado inteiramente na aba do seu navegador com as funções base64 embutidas do JavaScript. Ele nunca sai do seu dispositivo, não é logado e não é armazenado em lugar nenhum. Trate com a suspeita que merece qualquer página que peça um token e o envie a um servidor.