Como usar
- Escreva o Cabeçalho (JSON) e a Carga útil (JSON). Use Definir iat como agora, Definir nbf como agora ou Definir exp em para preencher os tempos.
- Escolha o Algoritmo e digite o Segredo. Escolha Base64 em Codificação do segredo se o segredo estiver escrito em Base64.
- Copie o Token. Ele tem três partes separadas por pontos: o cabeçalho, a carga útil e a assinatura.
- Cole um token em Token a conferir para ver se a assinatura corresponde ao segredo acima.
Como um JWT é assinado
Um JSON Web Token (RFC 7519) é um cabeçalho e uma carga útil, cada um escrito como JSON e codificado em base64url (RFC 7515), unidos por um ponto. A assinatura é um HMAC dessas duas partes, feito com o segredo (RFC 7518, seção 3.2). O cabeçalho informa o algoritmo no campo alg, e esta página define esse campo com o algoritmo que você escolher.
A página escreve cada objeto JSON na forma compacta antes de codificá-lo, então os bytes assinados são a forma compacta do que você digitou, e não o texto com seus espaços e quebras de linha. Qualquer parte que confere o token trabalha com os bytes que recebe, então o token é válido de qualquer modo.
entrada da assinatura = BASE64URL(cabeçalho) . BASE64URL(carga útil)
assinatura = HMAC-SHA-256(segredo, entrada da assinatura)
(HS384 e HS512 usam HMAC-SHA-384 e HMAC-SHA-512)
token = entrada da assinatura . BASE64URL(assinatura)
Os tempos na carga útil
As declarações iat (emitido em), nbf (não antes de) e exp (tempo de expiração) são NumericDate: segundos desde 1º de janeiro de 1970, às 00:00 UTC (RFC 7519, seções 2 e 4.1). Um token não é aceito a partir de exp, inclusive, nem antes de nbf. Os botões escrevem a hora do relógio do seu dispositivo, então um relógio errado gera um tempo errado.
O que a verificação faz e o que não faz
A verificação recalcula o HMAC do cabeçalho e da carga útil exatamente como foram colados, e o compara com a assinatura. Ela recusa alg none e todos os algoritmos exceto HS256, HS384 e HS512, para que um token não possa escolher uma verificação mais fraca.
Ela não verifica o significado das declarações: que iss é o emissor que você espera, ou que aud nomeia o seu serviço. Sua aplicação deve verificar isso, como a RFC 8725 recomenda.
Exemplo resolvido: HS256 com o segredo your-256-bit-secret
Com o cabeçalho {"alg": "HS256", "typ": "JWT"}, a carga útil {"sub": "1234567890", "name": "Ada Lovelace", "iat": 1516239022} e o segredo UTF-8 your-256-bit-secret, a página gera este token:
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkFkYSBMb3ZlbGFjZSIsImlhdCI6MTUxNjIzOTAyMn0.nmm0qepYRjhNji3O-jq8Pvcr7l_me1_bomw4EJucQCU
Conferido com o mesmo segredo, o resultado é uma assinatura válida. O token não tem a declaração exp nem nbf, então nenhum tempo pode torná-lo inválido. Conferido com qualquer outro segredo, a página informa que a assinatura não corresponde.
Perguntas frequentes
Meu segredo é enviado para algum servidor?
Não. O token é assinado no seu navegador com o SubtleCrypto do próprio navegador. O segredo fica guardado só enquanto a página está aberta: ele não é enviado, guardado nem registrado.
Por que a página diz que a assinatura corresponde, mas minha biblioteca rejeita o token?
A biblioteca pode conferir os tempos exp ou nbf, o público ou o emissor, ou pode ler o segredo em outra codificação. Leia o segredo como UTF-8 ou como Base64 do mesmo modo que a sua biblioteca faz, e compare os tempos com um relógio correto.
Por que o alg none é recusado?
Um token com alg none não tem assinatura, então qualquer pessoa pode escrever um. Um serviço deve rejeitá-lo. Esta página o recusa ao conferir, e a sua assinatura sempre escreve um algoritmo HMAC.
Qual deve ser o tamanho do segredo?
Pelo menos o tamanho da saída da função de hash: 32 bytes para HS256, 48 para HS384 e 64 para HS512 (RFC 7518, seção 3.2). A página avisa quando o segredo é menor.
Esta página consegue gerar tokens RS256 ou ES256?
Não. Ela assina e confere só com um segredo compartilhado, usando HS256, HS384 ou HS512. Tokens assinados com uma chave privada RSA ou ECDSA precisam dessa chave, que esta página não aceita.
Quando devo escolher Base64 para o segredo?
Só quando o segredo estiver escrito em Base64, por exemplo o valor k de uma chave JSON Web Key. Caso contrário, o segredo é lido como texto UTF-8 exatamente como você digitou, com os espaços.
Fontes
- RFC 7519 (em inglês): JSON Web Token (JWT)
- RFC 7515 (em inglês): JSON Web Signature (JWS), appendix A.1 test vector
- RFC 7518 (em inglês): JSON Web Algorithms (JWA), section 3.2
- RFC 8725 (em inglês): JSON Web Token Best Current Practices
Números e texto verificados pela última vez em terça-feira, 10 de novembro de 2026.