Como um JWT é montado
Um JSON Web Token tem três partes separadas por pontos: um cabeçalho dizendo qual algoritmo assinou, um payload com as claims (ID do usuário, perfis, validade) e uma assinatura. Cabeçalho e payload são só JSON codificado em Base64url, então qualquer um consegue ler; a assinatura prova que o token foi emitido por quem conhece o segredo e não foi alterado.
No HS256, a assinatura é um HMAC-SHA256 de cabeçalho.payload com um segredo compartilhado, o mesmo que a API usa para verificar. Isso torna tokens HS256 práticos para desenvolvimento, testes e serviços que compartilham uma chave.
Exemplo resolvido
O payload de exemplo famoso {"sub":"1234567890","name":"John Doe","iat":1516239022} assinado com o segredo your-256-bit-secret dá um token terminado em SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c, o mesmo de inúmeros tutoriais. Mude um caractere do payload e a assinatura muda por completo.
Validade
Ligue emitido em e defina expira em para adicionar as claims iat e exp, que a maioria das APIs exige. Use o decodificador de JWT para inspecionar o resultado.
Como funciona
A página lê o payload como JSON, adiciona iat e exp se pedido e monta o cabeçalho {"alg": "HS256", "typ": "JWT"} (ou HS384/HS512). Os dois são serializados, codificados em UTF-8 e escritos em Base64url sem padding, depois unidos por um ponto. A API Web Crypto do navegador calcula o HMAC dessa string com o seu segredo, como especifica a RFC 7518, e a assinatura é anexada em Base64url. A tabela mostra o cabeçalho e avisa quando o segredo é menor que o tamanho do hash. O segredo nunca sai desta aba e não é guardado.
Perguntas frequentes
O payload de um JWT é criptografado?
Não. Ele é só codificado em Base64url; qualquer pessoa com o token consegue ler. Não coloque segredos nele.
Qual deve ser o tamanho do segredo?
Pelo menos 256 bits (32 bytes) para HS256, como exige a RFC 7518; mais para HS384 e HS512.
Posso criar tokens RS256 aqui?
Não. RS256 e ES256 precisam de chaves privadas; esta página assina só com HMAC de segredo compartilhado.
Meu segredo é enviado?
Não. A assinatura acontece no navegador.
Fontes
- RFC 7519 — JSON Web Token (JWT)
- RFC 7515 — JSON Web Signature (JWS)
- RFC 7518 — JSON Web Algorithms (JWA)
- W3C — Web Cryptography API
Revisado em 17 de out. de 2026 · vetores de teste fixtures/dev/jwt-encoder/