Decodificador JWT

Decodifique o cabeçalho e o payload de um JWT no navegador, confira datas exp/nbf/iat e verifique assinaturas HS256/384/512 ou RS256/384/512.

Os dados inseridos e arquivos ficam no navegador

Cole um JWT (header.payload.signature) ou carregue um token de demonstração.

Verificar Assinatura

Decodificado

O cabeçalho, o payload e as datas aparecem aqui quando você cola um token.

Nesta página

Cole um JSON Web Token para ver o cabeçalho e o payload como JSON formatado, o algoritmo de assinatura e quando o token foi emitido, passa a valer e expira. Se quiser, verifique a assinatura com um segredo compartilhado ou uma chave pública RSA.

Funcionalidade detalhada

A decodificação acontece enquanto você digita: cabeçalho e payload são decodificados de base64url e formatados na ordem original das claims do token. Um Bearer inicial e quebras de linha copiadas de um cabeçalho HTTP são removidos automaticamente. As claims de tempo registradas exp, nbf e iat aparecem como datas no seu fuso horário, e um token expirado ou ainda não válido é sinalizado.

A verificação da assinatura roda em um módulo criptográfico em Rust compilado para WebAssembly e usa o algoritmo indicado no cabeçalho do token: HS256, HS384 e HS512 com segredo compartilhado (usado como texto UTF-8), RS256, RS384 e RS512 com chave pública RSA em PEM (BEGIN PUBLIC KEY ou BEGIN RSA PUBLIC KEY). Em vez disso, cole um JWK ou um JWKS (por exemplo do /.well-known/jwks.json de um provedor de identidade): a chave é escolhida pelo kid do token (sem kid, todas as chaves compatíveis com o algoritmo são testadas) e verificada com a Web Crypto API do navegador, o que cobre também PS256/384/512, ES256/384/512 e EdDSA (Ed25519). Um token com alg: none é sempre indicado como sem assinatura, nunca como válido.

Tokens e chaves ficam na página: nada é enviado a um servidor nem salvo. Lembre-se de que decodificar não prova autenticidade — só uma assinatura verificada prova.

Exemplos práticos

Exemplo do jwt.io: o token eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIi… decodifica para o cabeçalho {"alg":"HS256","typ":"JWT"} e um payload com sub, name e iat; o segredo your-256-bit-secret dá “Assinatura Verificada”, qualquer outro segredo dá “Assinatura Inválida”.

Token expirado: um payload com "exp": 1767225600 é marcado como expirado em 1º de janeiro de 2026 (exibido no seu fuso horário).

Direto do cabeçalho Authorization: cole Bearer eyJ… como está — o prefixo e as quebras de linha são removidos antes da decodificação.

Token sem assinatura: eyJhbGciOiJub25lIn0.eyJzdWIiOiIxIn0. decodifica para {"alg":"none"} e {"sub":"1"} e é indicado como sem assinatura e não confiável.

Como usar esta ferramenta

  1. Cole o token

    Cole o JWT em JWT codificado; a decodificação começa na hora.

  2. Leia o cabeçalho e o payload

    Confira o Cabeçalho e o Payload formatados, o selo do algoritmo e as datas de emissão/validade/expiração abaixo do payload.

  3. Verifique a assinatura

    Em Verificar Assinatura, informe o segredo HMAC ou a chave pública PEM em Segredo / chave pública RSA. O status mostra se a assinatura é válida.

Dicas e melhores práticas

  • Qualquer pessoa consegue decodificar um JWT: nunca coloque senhas ou outros segredos no payload.
  • O segredo HMAC é usado exatamente como digitado. Se o seu backend o guarda em base64, decodifique-o antes — colar a string base64 resulta em “Assinatura Inválida”.
  • Para tokens RS* cole a chave pública, não a privada; um certificado X.509 não é aceito, extraia antes a chave pública dele.
  • A expiração é comparada com o relógio do seu dispositivo, então uma hora do sistema errada gera uma marca de expirado errada.
  • Precisa de um token para testar? Crie um no Codificador JWT.