tigtools

Gerador de JWT

Crie e assine um JSON Web Token para testes ou verifique se a assinatura HMAC de um token corresponde a um segredo. A assinatura usa a Web Crypto API do seu navegador.

Executado no seu navegador Sem cadastro

Modo
O segredo permanece nesta aba do navegador e nunca é enviado a lugar algum. Ainda assim, não cole segredos de assinatura de produção em nenhum site: qualquer pessoa com o segredo pode criar tokens válidos para o seu sistema. Use segredos de teste aqui.

O alg é definido pelo menu de algoritmo; typ é JWT por padrão.

Declarações como sub, iat e exp. Os tempos são em segundos desde 1970 (UTC).

Informe um segredo para assinar o token.

Como usar

  1. Escolha HS256, HS384 ou HS512.
  2. Edite as claims do payload e clique em “Definir iat e exp” para adicionar o horário atual e uma expiração.
  3. Digite um segredo de teste ou gere um aleatório de 256 bits.
  4. Copie o token assinado. Para verificar um token, mude para “Verificar assinatura”, cole-o e informe o segredo.

Como funciona

Um JSON Web Token (RFC 7519) tem três partes codificadas em Base64URL: um header, um payload de claims e uma assinatura. Com os algoritmos HMAC HS256, HS384 e HS512, a assinatura é um HMAC com SHA-256, SHA-384 ou SHA-512 sobre “header.payload”, usando um segredo compartilhado. Qualquer pessoa com o segredo pode criar e verificar tokens.

A ferramenta serializa o header e o payload como JSON compacto, codifica-os e os assina com crypto.subtle, a Web Crypto API integrada ao seu navegador. O campo alg no header sempre corresponde ao algoritmo escolhido, typ por padrão é JWT, e outros campos de header, como kid, são mantidos. “Definir iat e exp” grava a hora atual como iat (issued at) e adiciona o tempo de vida escolhido como exp, ambos em segundos desde 1 de janeiro de 1970 UTC. O resultado é compatível com outras bibliotecas JWT; por exemplo, o token de exemplo clássico do jwt.io é reproduzido exatamente.

O segredo pode ser texto simples (seus bytes UTF-8 são a chave) ou bytes codificados em Base64/Base64URL, como muitos frameworks usam. O botão de segredo aleatório cria 32 bytes aleatórios com crypto.getRandomValues. Para HS256, use pelo menos 32 bytes aleatórios; segredos curtos escolhidos por humanos podem ser descobertos offline a partir de qualquer token.

A verificação decodifica o token, confere se ele usa um algoritmo HMAC e recalcula a assinatura com crypto.subtle.verify. Ela também mostra quando exp ou nbf indicam que o token está expirado ou ainda não é válido. RS256, ES256 e outros algoritmos de chave pública não são suportados, e a verificação aqui não confere issuer, audience nem outras claims que a sua aplicação possa exigir.

Exemplos

Testando uma API localmente

Seu servidor de desenvolvimento espera tokens HS256 assinados com “dev-secret-change-me”. Defina sub como um ID de usuário de teste, clique em “Definir iat e exp” com 1 hora, insira o segredo e envie o token em um cabeçalho Authorization: Bearer.

Verificar qual segredo assinou um token

Um token de staging é rejeitado. Cole-o em “Verificar assinatura” e teste o segredo de staging: “Assinatura inválida” indica que o token foi assinado com um segredo diferente ou que o segredo está em outro formato (texto vs Base64).

Reproduzindo o exemplo do jwt.io

Com o header {"alg":"HS256","typ":"JWT"}, o payload {"sub":"1234567890","name":"John Doe","iat":1516239022} e o segredo “your-256-bit-secret”, o token termina em SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c, igual ao do jwt.io.

Perguntas frequentes

Meu segredo é enviado para o seu servidor?

Não. A assinatura e a verificação são executadas com a Web Crypto API no seu navegador, e o segredo não é armazenado nem enviado a lugar algum. Ainda assim, recomendamos usar apenas segredos de teste, porque um segredo de assinatura real nunca deve ser digitado em um site.

Por que a assinatura é inválida se o segredo está correto?

Verifique o formato do segredo. Alguns sistemas usam o texto do segredo; outros primeiro o decodificam de Base64, o que gera bytes de chave diferentes. Verifique também se o token não foi alterado e se usa o mesmo algoritmo.

Posso criar tokens RS256 ou ES256?

Não com esta ferramenta. Ela suporta apenas os algoritmos HMAC de segredo compartilhado HS256, HS384 e HS512.

O payload é criptografado?

Não. Um JWT assinado é apenas codificado; qualquer pessoa pode decodificar e ler o payload. A assinatura apenas comprova que ele não foi alterado. Não coloque senhas nem outros segredos no payload.

Privacidade

Os tokens são criados e verificados apenas no seu navegador com a Web Crypto API. O header, o payload, o token e o segredo não são enviados, armazenados nem incluídos em análises.