Última atualização: 8 de setembro de 2026

Decodificador de JWT

Veja o header e o payload de um token JWT, direto no navegador.

Nota de conformidade: A decodificação roda inteiramente no seu navegador (JavaScript client-side). Nenhum dado que você cola aqui é enviado, armazenado ou logado em nenhum servidor — mesmo colando um token real, ele nunca sai do seu dispositivo.

Como usar o Decodificador de JWT

  1. 1Cole o token JWT completo. As 3 partes separadas por ponto (header.payload.assinatura).
  2. 2Veja o resultado na hora. Header, payload e status de expiração aparecem automaticamente.

Decodificar não é o mesmo que validar

Um JWT (JSON Web Token) tem 3 partes separadas por ponto: header.payload.assinatura. O header e o payload são apenas JSON codificado em Base64URL, sem nenhuma criptografia, então qualquer ferramenta consegue decodificá-los de volta para texto legível instantaneamente — inclusive esta aqui. A terceira parte, a assinatura, é diferente: ela é o resultado de um algoritmo criptográfico (normalmente HMAC-SHA256 ou RSA) aplicado sobre as duas primeiras partes usando uma chave secreta que só o servidor que emitiu o token conhece.

Por isso este decodificador não verifica a assinatura: fazer isso exigiria conhecer a chave secreta do sistema que emitiu o token, algo que nenhuma ferramenta de terceiros deveria ter. Um token com header e payload decodificados aqui parece "válido" no sentido de estar bem formado, mas isso não confirma que a assinatura bate, nem que o token não foi adulterado — só o backend que possui a chave secreta pode confirmar isso de verdade.

Exemplo de código: decodificando a parte do payload

function base64UrlParaTexto(base64url) {
  // Base64URL usa - e _ em vez de + e /, e não tem padding
  let base64 = base64url.replace(/-/g, '+').replace(/_/g, '/');
  while (base64.length % 4) base64 += '=';

  // atob() sozinho quebra em claims com acentos/emoji (só entende Latin1);
  // TextDecoder trata o resultado como UTF-8 de verdade
  const binario = atob(base64);
  const bytes = new Uint8Array(binario.length);
  for (let i = 0; i < binario.length; i++) bytes[i] = binario.charCodeAt(i);
  return new TextDecoder().decode(bytes);
}

function decodificarPayloadJwt(token) {
  const partes = token.split('.');
  if (partes.length !== 3) throw new Error('JWT precisa ter 3 partes');
  return JSON.parse(base64UrlParaTexto(partes[1]));
}

Os claims mais comuns de encontrar no payload são exp (expiration, quando o token deixa de ser válido) e iat (issued at, quando foi emitido), ambos como timestamp Unix em segundos. Esta ferramenta lê os dois automaticamente e mostra se o token já expirou, sem precisar fazer essa conta na mão — para converter qualquer outro timestamp Unix isoladamente, o Conversor de Timestamp deste site faz isso.

Em teste de API, decodificar um JWT rapidamente serve principalmente para depuração: confirmar se o backend está incluindo o claim certo (como role ou sub) depois de um login, verificar se o tempo de expiração configurado bate com o esperado, ou entender por que uma chamada autenticada está sendo rejeitada mesmo com um token aparentemente presente no header Authorization. Vale reforçar: como qualquer pessoa com o token em mãos consegue ler o payload (não é criptografado, só codificado), nunca é seguro colocar dado sensível — senha, número de cartão, CPF — direto em um claim JWT sem antes avaliar se ele precisa mesmo estar ali.

Perguntas Frequentes

Este decodificador confirma que o JWT é válido/autêntico?

Não. Ele só decodifica o header e o payload, que não são criptografados. Confirmar a validade exige checar a assinatura com a chave secreta do sistema que emitiu o token, algo que só o backend pode fazer.

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

A decodificação roda inteiramente no seu navegador — nada é enviado a nenhum servidor. Ainda assim, como boa prática, evite compartilhar tokens de produção em qualquer ferramenta de terceiros sempre que puder testar com um token de ambiente de teste.

Por que meu token não decodifica?

Confira se colou as 3 partes completas do token, sem cortar nenhum caractere. Um JWT incompleto ou com texto extra colado junto não vai ter exatamente 2 pontos separando 3 partes válidas em Base64URL.

Copiado com sucesso!