Como usar
- Escolha HS256, HS384 ou HS512.
- Edite as claims do payload e clique em “Definir iat e exp” para adicionar o horário atual e uma expiração.
- Digite um segredo de teste ou gere um aleatório de 256 bits.
- 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.