Codificador / decodificador JWT

Cole um token para ler o cabeçalho e o payload, ou assine um a partir das suas próprias claims — sem botão, sem envio.

Opcional ao decodificar (preencha para verificar), obrigatório para assinar.

Como usar

  1. Cole um token: o cabeçalho e o payload aparecem na hora, sem botão para pressionar. Tudo o que veio do token fica exatamente como foi assinado — a entrada nunca é reescrita.
  2. Adicione o segredo abaixo da entrada para conferir a assinatura. Deixar vazio significa apenas “não verificada”: você continua lendo as claims como estão.
  3. Mude para Codificar, escreva suas claims como JSON, escolha HS256/384/512 e um segredo, e copie o token gerado. Trocar de modo nunca apaga o que você digitou.
  4. As claims padrão exp / iat / nbf são exibidas por extenso no seu idioma e fuso horário, com marcações de expirado e ainda não válido.

Exemplo

Token

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJ1LTEwMjQiLCJuYW1lIjoiSmFuZSBDb29wZXIiLCJyb2xlIjoiZWRpdG9yIiwiaXNzIjoiaHR0cHM6Ly9hcGkuZXhhbXBsZS5jb20iLCJpYXQiOjE3NjcyMjU2MDAsImV4cCI6MTc5ODc2MTYwMH0.jCqliF6m-TAglXcHrjuXj7kYIjjsRO7kv6_8O1yb_7Q

Cabeçalho e payload

Header
{
  "alg": "HS256",
  "typ": "JWT"
}

Payload
{
  "sub": "u-1024",
  "name": "Jane Cooper",
  "role": "editor",
  "iss": "https://api.example.com",
  "iat": 1767225600,
  "exp": 1798761600
}

Assinado com o segredo “dev-secret-change-me”; digite-o em Segredo e a linha de status muda para “Assinatura verificada”. Mude para Codificar e pressione Exemplo para obter o mesmo payload: com o mesmo segredo ele reconstrói este token exato, caractere por caractere.

Regras, limites e problemas conhecidos

  • Apenas HS256, HS384 e HS512 são suportados, tanto para assinar quanto para verificar. Tokens RS*, ES* e PS* são decodificados e exibidos como estão, mas a assinatura nunca é conferida — isso exige uma chave pública, então a linha de status avisa em vez de adivinhar.
  • Tokens sem assinatura (alg: none) são decodificados e claramente sinalizados, mas nunca gerados: pedir para assinar sem um segredo gera um erro em vez de um token sem assinatura.
  • A codificação monta o cabeçalho sozinha (`{"alg": … ,"typ": "JWT"}`). Campos de cabeçalho como kid, jku, x5c ou cty não são transportados — esta ferramenta assina claims, não cadeias de certificados.
  • Seu JSON de claims é reserializado de forma compacta antes de assinar, então indentação e comentários ficam fora do token. A ordem das chaves segue os objetos JavaScript: chaves repetidas ficam com a última, e chaves com aparência numérica vão para a frente.
  • Inteiros muito grandes perdem precisão — `12345678901234567890` volta arredondado, porque é o que os números JavaScript fazem. Nada é corrigido em silêncio; use strings quando os dígitos exatos importarem.
  • As claims são exibidas indentadas para leitura, enquanto a assinatura cobre os segmentos brutos exatamente como aparecem no token. Nada é recodificado pelas suas costas, então um token que verifica aqui também verifica no seu próprio código.
  • Base64url é rígido: `+`, `/` e `=` são reportados como erros em vez de aceitos silenciosamente, e bytes que não são UTF-8 são reportados em vez de substituídos por caracteres de substituição. Espaços dentro de um token colado são ignorados, já que tokens nunca os contêm.
  • JWEs criptografados (cinco partes) não são descriptografados — você é avisado de que foi isso que colou.
  • Limite de 10.000 caracteres. Nada é enviado, armazenado, gravado na URL ou compartilhado: o botão de compartilhar só compartilha o endereço desta página, nunca seu token ou segredo.

Depois de ler as claims, estes são os próximos passos habituais.