JWT Decoder

Decodificador / Codificador JWT

Decodifique qualquer JSON Web Token para ver header, payload e assinatura — ou assine um novo com HS256/384/512. Verifica assinaturas HMAC localmente. 100% no seu navegador.

Decodificador / Codificador JWT — TL;DR

Decodifique qualquer JSON Web Token para ver header, payload e assinatura — ou assine um novo com HS256/384/512. Verifica assinaturas HMAC localmente. 100% no seu navegador.

Não. A ferramenta inteira é JavaScript dentro desta página. Cole um token, a decodificação acontece no seu navegador e os bytes nunca saem da aba. Abra DevTools → Network e observe — nenhuma requisição é enviada durante a decodificação ou a verificação. Por isso é seguro colar tokens reais de clientes ou de produção.

Ela prova que o token foi assinado por alguém que possui o segredo (HMAC) ou a chave privada (RSA/ECDSA). Ela NÃO criptografa o payload — header e payload são apenas JSON em base64url, qualquer pessoa com o token pode lê-los. A assinatura só impede adulteração: se você alterar um único byte do payload, a assinatura deixa de bater.

Um JWT geralmente carrega o ID do usuário, e-mail, escopos e às vezes algo equivalente a cookies de sessão — exatamente os dados que você NÃO deve colar no servidor de um estranho. O decodificador do iKit roda como JavaScript já carregado na sua aba do navegador. Verificável em DevTools → Network: sem fetch, sem XHR, sem beacon durante a decodificação ou a verificação.

Header

Payload

Assinatura

Claims padrão


            

Verificar assinatura HMAC

Para tokens HS256/384/512, digite o segredo de assinatura para verificar a assinatura localmente. Para RS256/ES256 (RSA/ECDSA), use uma biblioteca no servidor — a verificação por chave pública requer um arquivo PEM, que não aceitamos aqui.

Por que o iKit JWT Decoder

A forma mais rápida de depurar um JWT — sem upload, sem cadastro, sem terceiros entre você e seu token.

Três painéis, uma colagem

Cole um JWT e veja header, payload e assinatura decodificados lado a lado. Os claims padrão (iss, sub, aud, exp, iat) recebem timestamp e rótulo.

Verificação HMAC local

Para tokens HS256/384/512, digite o segredo para verificar a assinatura usando a Web Crypto API do navegador. O segredo nunca sai da sua aba.

Assine seus próprios tokens

Mude para o modo Codificar, edite header e payload como JSON, escolha o algoritmo, digite um segredo e obtenha um token assinado na hora.

Privacidade por design

Payloads de JWT contêm IDs de usuário, e-mails, às vezes escopos — nunca cole isso em uma ferramenta no servidor. O decodificador do iKit roda como JavaScript no seu navegador. Verificável em DevTools → Network.

Atenção à expiração

Claims padrão como exp, nbf, iat são destacados com datas legíveis e um selo claro de EXPIRADO / válido para você ver de relance se o token ainda está bom.

Padrão aberto, código aberto

Construído sobre a Web Crypto API e o parser JSON nativos do navegador — mesmos algoritmos do OpenSSL, libjwt, jose. O comportamento corresponde ao de qualquer biblioteca JWT moderna.

Como a decodificação de JWT realmente funciona

Um JWT são três segmentos JSON em base64url separados por pontos — só isso.

  1. 1

    Dividir nos dois pontos

    Um JWT tem o formato aaa.bbb.ccc. Dividimos nos dois pontos literais, obtendo header, payload e assinatura codificados. Se não obtivermos exatamente três partes, o token está malformado.

  2. 2

    Decodificar cada parte em Base64URL

    Header e payload são JSON UTF-8 codificados em base64url. Base64URL = Base64 com -/_ em vez de +//= e sem padding. Fazemos atob depois de restaurar os caracteres e então JSON.parse na string resultante.

  3. 3

    Renderizar com estrutura

    O header informa o algoritmo (alg: HS256, RS256, etc.) e o tipo. O payload contém os claims — os padrão (iss, sub, aud, exp, iat, nbf, jti) mais quaisquer campos personalizados. Exibimos cada um em uma seção rotulada.

  4. 4

    Verificar (apenas HMAC)

    Para HS256/384/512, recalculamos o HMAC de header.payload usando o segredo digitado e comparamos com a assinatura do terceiro segmento. É o mesmo que HMAC(SHA-256, secret, signing_input) codificado em base64url. Bateu = assinatura válida.

Tarefas comuns ao depurar JWT

Situações reais em que você vai recorrer a um decodificador JWT.

Inspecionar um token do seu provedor de autenticação

Auth0, Firebase, Keycloak e AWS Cognito retornam JWTs após o login. Cole o access_token para ver quais claims sua aplicação está realmente recebendo — qual o ID do usuário, quais escopos, quando expira?

Depurar um 401 Unauthorized

API rejeitando sua requisição? Decodifique o token e verifique: está expirado (exp no passado)? O claim de audiência (aud) é o que a API espera? O emissor (iss) é o tenant correto?

Verificar uma assinatura de webhook

Stripe, GitHub Apps e Slack enviam payloads de webhook assinados como JWTs. Após receber um, cole-o no modo Decodificar junto com o segredo compartilhado para confirmar que a requisição realmente veio deles.

Gerar tokens de teste

Precisa de um JWT assinado novo para um teste de integração? Mude para o modo Codificar, edite o payload (ID de usuário customizado, expiração customizada), escolha HS256 + seu segredo de teste e obtenha um token em milissegundos. Sem ida e volta ao backend.

Por que decodificar JWT localmente importa

Um JWT geralmente carrega o ID do usuário, e-mail, escopos e às vezes algo equivalente a cookies de sessão — exatamente os dados que você NÃO deve colar no servidor de um estranho. O decodificador do iKit roda como JavaScript já carregado na sua aba do navegador. Verificável em DevTools → Network: sem fetch, sem XHR, sem beacon durante a decodificação ou a verificação.

  • Zero requisições de rede durante a decodificação ou a verificação — verificável em DevTools.
  • O segredo digitado para verificação fica na memória do navegador e é apagado ao Limpar / atualizar a página.
  • Seguro para tokens de produção, tokens de acesso de clientes e segredos de webhook.

Guias relacionados

Tutoriais detalhados e comparações de ferramentas do blog do iKit.

Perguntas frequentes

É seguro? Meus JWTs são enviados a algum servidor?

Não. A ferramenta inteira é JavaScript dentro desta página. Cole um token, a decodificação acontece no seu navegador e os bytes nunca saem da aba. Abra DevTools → Network e observe — nenhuma requisição é enviada durante a decodificação ou a verificação. Por isso é seguro colar tokens reais de clientes ou de produção.

O que a assinatura JWT realmente verifica?

Ela prova que o token foi assinado por alguém que possui o segredo (HMAC) ou a chave privada (RSA/ECDSA). Ela NÃO criptografa o payload — header e payload são apenas JSON em base64url, qualquer pessoa com o token pode lê-los. A assinatura só impede adulteração: se você alterar um único byte do payload, a assinatura deixa de bater.

Por que meu payload decodificado parece correto, mas a verificação falha?

Três causas comuns: (1) segredo errado — segredos JWT diferenciam maiúsculas/minúsculas e qualquer espaço em branco a mais quebra a verificação. (2) Algoritmo incompatível — o header diz HS256, mas o segredo foi usado originalmente com HS512. (3) Token foi modificado após a assinatura — até um byte quebra a assinatura. Confira se header.alg corresponde ao esperado.

E quanto a RS256, ES256 e outros algoritmos de chave pública?

O iKit atualmente suporta apenas verificação HMAC (HS256/384/512). RS256 e ES256 usam criptografia de chave pública — a verificação requer a chave pública do emissor em formato PEM, o que exige uma UI mais elaborada. Por enquanto, a decodificação funciona normalmente (header/payload/assinatura são exibidos corretamente), mas o botão Verificar informará que não é suportado. Verificação RSA/ECDSA está planejada.

Qual a diferença em relação ao jwt.io?

Mesma ideia, padrões diferentes. O decodificador do iKit roda inteiramente no seu navegador (o jwt.io também, mas o código do iKit pode ser visto no view-source e nosso domínio não tem rastreadores de terceiros). Adicionamos um selo claro de EXPIRADO / válido para o claim exp, notas estruturadas para os claims (iat / nbf / iss / sub / aud / jti como linhas legíveis) e um botão de copiar tudo decodificado para colar a saída completa em um relatório de bug.