Gerador de JWT
Assine um JSON Web Token seu para testar um endpoint, com os mesmos doze algoritmos que um emissor de verdade usa — e sem que a chave saia do seu navegador.
Assine um token seu para testar um endpoint. Tudo é calculado nesta página.
A chave e o token pronto ficam no seu navegador: nada é enviado a lugar nenhum e nada disso vai em um link compartilhado.
Verifique este token no seu próprio código. O trecho segue o algoritmo do cabeçalho.
Criar um JSON Web Token assinado
Quase todo trabalho com tokens é ler tokens, que é o que o decodificador de JWT faz. Às vezes é preciso o caminho inverso: um token que ainda não existe, para ver como um serviço reage. Uma API de staging que recusa tudo, um middleware que você está escrevendo, um fixture de teste que precisa expirar em cinco minutos — todos precisam de um token sob o seu controle, e é isso que esta página assina.
Ela abre na aba Criar um token. Tudo ali — o menu de algoritmos, o payload, a chave — é montado e assinado pelo seu próprio navegador com crypto.subtle.sign. Em nenhum momento há uma requisição a um servidor, então a chave que você cola fica tão privada quanto a aba em que foi digitada.
O que o cabeçalho e o payload acabam contendo
O cabeçalho é escrito para você: o algoritmo escolhido e typ: "JWT", mais um kid se você preencher aquele campo. O identificador de chave importa quando o serviço que recebe guarda várias chaves e escolhe uma pelo nome; deixe o campo vazio e o cabeçalho fica com dois campos.
O payload é seu. Duas claims não são: ao assinar, iat sempre recebe a hora atual e exp vem do menu Expira em — cinco minutos, uma hora, um dia, trinta dias, ou nada. Quando o token aparece, a caixa do payload é reescrita com exatamente o que foi assinado, então os carimbos de tempo que você vê são os que estão dentro dele. Se essas duas claims são o que importa no seu teste, o verificador de expiração explica como um servidor as lê.
Escolher o algoritmo
Os doze algoritmos se dividem em duas famílias, e a diferença não é força, é quem precisa guardar a chave.
| Família | Chave que você cola | Use quando |
|---|---|---|
| HS256 / HS384 / HS512 | Um segredo compartilhado, em texto ou Base64 | Um mesmo serviço emite e verifica os próprios tokens |
| RS256 / RS384 / RS512 | Chave privada PKCS#8 (PEM) ou JWK | Muitos serviços verificam; eles só veem a metade pública |
| PS256 / PS384 / PS512 | A mesma chave privada RSA | RSA com o preenchimento PSS mais novo, quando o receptor pede |
| ES256 / ES384 / ES512 | Uma chave privada EC, P-256 / P-384 / P-521 | Você quer assinaturas curtas e chaves pequenas |
HS256 vem selecionado porque costuma ser o que as pessoas estão testando: um segredo numa variável de ambiente, um serviço dos dois lados. No momento em que mais de um serviço precisa conferir o token, um algoritmo de chave pública é o formato melhor, porque quem verifica nunca precisa receber algo capaz de emitir tokens.
Para que serve um token gerado — e para que não
Um token assinado aqui é um token real: cole-o no decodificador acima, clique em Verificar com a mesma chave e a assinatura confere, porque a página a calcula do mesmo jeito que qualquer biblioteca. Isso o torna útil para fixtures, para reproduzir um bug com um token expirado ou ainda não válido, e para descobrir se o seu middleware valida aud de fato ou apenas o lê.
O que ele não é: uma porta de entrada. Um token só é aceito por um serviço que tenha a chave correspondente, então assinar um com um segredo seu não prova nada a mais ninguém. É disso que trata a assinatura, e é por isso que a diferença entre um token e um cookie de sessão se resume a quem precisa guardar o quê.
Chaves, formatos e os erros que eles causam
Para a família HS, cole o segredo como texto puro, ou marque O segredo está em Base64 se a sua configuração o guarda codificado: a mesma string crua e decodificada gera assinaturas completamente diferentes, motivo comum de um token funcionar num lugar e falhar em outro.
Para RS, PS e ES o navegador aceita um PEM PKCS#8 — o bloco que começa com -----BEGIN PRIVATE KEY----- — ou um JWK, a forma JSON em que um conjunto de chaves é distribuído. Um bloco antigo -----BEGIN RSA PRIVATE KEY----- é PKCS#1 e precisa ser convertido antes. Se você colar uma chave pública por engano, a página avisa em vez de falhar com um erro enigmático, porque uma chave pública confere uma assinatura mas nunca a cria.