Decodificador JWT
Decodifique o header e o payload de um JWT localmente. A assinatura não é verificada.
Como usar
Um JSON Web Token (JWT, RFC 7519) normalmente é formado por três partes separadas por pontos: um header, um payload e uma assinatura. As duas primeiras são JSON codificado em Base64URL, uma variante do Base64 que é segura em URLs e que, nos JWTs, é escrita sem o preenchimento =. Cole um token e use “Decodificar” para ver o header e o payload como JSON indentado. A assinatura não é decodificada: são dados binários, não JSON.
O header indica o algoritmo (alg): HS256 usa um segredo compartilhado (um HMAC), enquanto RS256 e ES256 são assinaturas feitas com uma chave privada e verificadas com a chave pública correspondente. O payload contém as claims: entre as claims padrão estão iss (emissor), sub (assunto), aud (público), exp (expiração), nbf (não antes de), iat (emitido em) e jti (ID do token).
exp, nbf e iat são timestamps Unix em segundos. Esta ferramenta os mostra como números; para ler um deles como data, cole-o no “Conversor de timestamp Unix”.
Decodificar não é verificar. Qualquer pessoa pode criar um token com qualquer payload, então um token decodificado não prova nada até que a aplicação que o recebe verifique a assinatura com a chave certa, aceite apenas os algoritmos que espera e confira exp e nbf. Um token com alg definido como none não tem assinatura nenhuma e deve ser recusado, a menos que isso seja explicitamente intencional.
Base64URL é uma codificação, não uma criptografia: qualquer pessoa que tenha um token pode ler o payload dele, e é por isso que senhas e outros segredos não devem ir nele. Tokens criptografados (JWE) têm cinco partes e não podem ser lidos sem a chave, então esta ferramenta os recusa. A decodificação acontece no seu navegador; o token não é enviado a lugar nenhum.
Exemplo
Decodifica um token de demonstração. Ler o cabeçalho e o conteúdo não verifica uma assinatura nem comprova autenticidade.
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjMifQ.signatureHeader {"alg": "HS256", "typ": "JWT"} e payload {"sub": "123"}.eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjMiLCJuYW1lIjoiQW5hIiwiaWF0IjoxNzA0MDY3MjAwLCJleHAiOjE3MDQwNzA4MDB9.signaturePayload com iat 1704067200 e exp 1704070800: emitido à meia-noite UTC de 1º de janeiro de 2024 e válido por uma hora.eyJhbGciOiJub25lIn0.eyJzdWIiOiIxMjMifQ.Header {"alg": "none"} e assinatura vazia: um token não assinado, que um servidor normalmente deveria recusar.
Perguntas frequentes
É seguro colar um token de produção?
O processamento é local, mas os tokens podem conter dados sensíveis. Prefira um token expirado ou com os dados ocultados e nunca compartilhe um segredo de assinatura.
Esta ferramenta consegue dizer se um token é válido?
Não. Ela não verifica a assinatura, a expiração nem o emissor. Verificar um token exige o segredo compartilhado (HS256) ou a chave pública do emissor (RS256, ES256) e é tarefa da aplicação que o aceita.
Por que o payload pode ser lido se o token é assinado?
Uma assinatura protege contra alterações, não contra leitura. O payload está apenas codificado em Base64URL, então é público para qualquer pessoa que veja o token.
Por que aparece um erro?
O texto não é um token cujas duas primeiras partes sejam decodificadas como JSON. Confira se o token inteiro foi copiado, sem a palavra Bearer nem aspas em volta, e se não é um JWE criptografado.