O que um decodificador de JWT realmente faz
Um JSON Web Token (JWT) parece uma longa e opaca sequência de caracteres aleatórios, mas não é criptografado nem é uma cifra secreta. É um contêiner compacto e seguro para URLs que carrega dados estruturados entre duas partes. Cole um token no decodificador acima e ele separa essa string e mostra o JSON real lá dentro — os metadados, as claims, para quem o token é e quando ele expira. Tudo acontece direto no seu navegador. O token nunca é enviado, registrado ou transmitido a lugar nenhum, o que importa muito quando o que você está inspecionando é uma credencial de sessão ativa.

Três partes, dois pontos
Todo JWT bem formado são três strings codificadas em Base64url unidas por pontos: cabeçalho.payload.assinatura. Esse único caractere de ponto é como os parsers sabem onde uma seção termina e a próxima começa, e é por isso que um token com o número errado de pontos é rejeitado antes mesmo de qualquer outra coisa ser lida.
O cabeçalho é um pequeno objeto JSON que descreve o próprio token. Ele quase sempre contém typ (o tipo, geralmente JWT) e alg — o algoritmo de assinatura, como HS256 (HMAC com SHA-256) ou RS256 (RSA com SHA-256). O cabeçalho diz ao verificador exatamente como a assinatura foi produzida.
O payload é a parte com que a maioria das pessoas se importa. É outro objeto JSON que guarda as claims — afirmações sobre o usuário e o token. A especificação organiza as claims em registradas (nomes padrão e reservados), públicas e privadas (nomes personalizados que você inventa para o seu próprio app). Decodificar o payload é o que revela quem está logado, qual papel a pessoa tem e quando a sessão expira.
A assinatura é o selo criptográfico. Ela é calculada sobre o cabeçalho e o payload codificados usando o algoritmo do cabeçalho mais uma chave secreta ou privada. Como cobre as duas outras seções, qualquer alteração no cabeçalho ou no payload — mesmo um único caractere — a invalida.
As claims que você verá com mais frequência
As claims registradas são nomes curtos, de três letras, definidos pela RFC 7519 para que sistemas diferentes consigam interoperar. Um punhado delas aparece em quase todo lugar:
iss— issuer (emissor): quem cunhou o token (seu servidor de autenticação ou provedor de identidade).sub— subject (sujeito): a entidade a que o token se refere, normalmente um ID de usuário estável.aud— audience (audiência): o destinatário a que o token se destina. Uma API deve rejeitar tokens cuja audiência não seja ela mesma.exp— expiration time (prazo de expiração): um timestamp Unix após o qual o token não deve ser aceito.iat— issued at (emitido em): o timestamp Unix de quando o token foi criado.
Você também pode se deparar com nbf (not before, não antes de) e jti (um ID único de token). Os timestamps são segundos desde 1970 em UTC, que é por que um decodificador que os exibe como datas legíveis poupa você da aritmética mental de checar se um token já expirou.
Decodificar não é verificar — esta é a parte que pega as pessoas
Essa distinção é a coisa mais importante de entender sobre JWTs. Decodificar significa ler o conteúdo: não requer chave alguma e qualquer um que tenha o token consegue fazê-lo, porque Base64url é uma codificação, não criptografia. Verificar significa provar que o token é autêntico e não foi adulterado — recalculando a assinatura com a chave secreta ou pública correta e confirmando que ela coincide.
Esta ferramenta decodifica. Ela mostra o que o token diz, não se o token é confiável. Um token pode ser forjado, expirado ou reproduzido e ainda assim decodificar em um JSON de aparência perfeitamente limpa. Nunca tome uma decisão de autorização baseada apenas em claims decodificadas. Em produção, você verifica a assinatura no servidor, checa exp e confirma que iss e aud coincidem com o que você espera — usando uma biblioteca confiável, nunca comparação de strings feita à mão.

Um payload não é um cofre
Como o payload é apenas codificado em Base64url, ele é legível por qualquer pessoa que intercepte o token. Trate tudo que estiver nele como público. Não coloque senhas, números completos de cartão de crédito, chaves secretas ou quaisquer dados pessoais sensíveis nas claims do JWT — se você consegue decodificá-lo aqui com um clique, qualquer outra pessoa que obtenha uma cópia também consegue. A assinatura protege contra modificação, nunca contra leitura. Se você realmente precisa ocultar o conteúdo do payload, esse é trabalho para o JWE (tokens criptografados), uma especificação totalmente diferente.
Privacidade e ferramentas relacionadas
Inspecionar um token é um ato sensível, então este decodificador roda inteiramente no lado do cliente — a análise é JavaScript puro na sua aba e nada sai da sua máquina. Colar um token de sessão em uma ferramenta apoiada em servidor significa entregar uma credencial ativa a terceiros, que é exatamente o que você deve evitar. Para a codificação que está por trás de tudo isso, veja nossa ferramenta Base64 e explore o restante das nossas ferramentas para desenvolvedores para mais utilitários no dispositivo.
Perguntas frequentes
Um JWT é criptografado?
Não. Um JWT padrão é codificado em Base64url, não criptografado. Qualquer um com o token pode ler o cabeçalho e o payload. Use JWE se precisar que o conteúdo fique oculto.
Esta ferramenta verifica a assinatura?
Não. Ela apenas decodifica e exibe o cabeçalho e o payload. Verificar a assinatura requer a chave secreta ou pública do emissor e deve ser feito no seu servidor.
É seguro colar meu token aqui?
Sim. A decodificação roda inteiramente no seu navegador usando JavaScript local. O token nunca é enviado, armazenado ou transmitido a qualquer servidor.
O que significam iss, sub, aud, exp e iat?
São claims registradas: emissor, sujeito, audiência, prazo de expiração e momento de emissão. As três relacionadas a tempo usam timestamps Unix em segundos.
Posso confiar nas claims exibidas após a decodificação?
Não por si só. Claims decodificadas podem vir de um token forjado ou expirado. Sempre verifique a assinatura e cheque a expiração no servidor antes de confiar nelas.
Por que meu token tem três partes separadas por pontos?
São o cabeçalho, o payload e a assinatura, cada um codificado em Base64url e unidos por pontos. Os pontos indicam aos parsers onde cada seção começa e termina.
