Gerador e verificador de JWT
Cria e verifica JSON Web Tokens com HS256, RS256, PS256, ES256 ou EdDSA. Edita as claims, define exp e iat e verifica assinaturas no teu navegador.
As chaves e os tokens são segredos. Tudo é assinado e verificado localmente com a API Web Crypto do teu navegador: nada é enviado.
Criar um JWT assinado
Este navegador não suporta Ed25519 na Web Crypto, por isso o EdDSA não está disponível.
As chaves de teste são geradas no teu navegador e preenchidas abaixo. Guarda para ti a chave privada ou o segredo; partilha apenas a chave pública.
Verificar um JWT
Como criar um JWT assinado
- Escolhe o Algoritmo: HS256/384/512 (segredo partilhado), RS256/384/512 ou PS256/384/512 (RSA), ES256/384/512 (ECDSA nas curvas P-256, P-384 ou P-521) ou EdDSA (Ed25519, se o teu navegador o suportar).
- Edita o Cabeçalho (JSON) e o Payload (claims JSON). O campo
algacompanha sempre o algoritmo escolhido etypvaleJWTpor omissão. - Usa os botões das claims de tempo para acrescentar datas: iat = agora, nbf = agora, ou escolhe um prazo como «daqui a 1 hora» e clica em Definir exp. Os valores são NumericDates: segundos desde 1 de janeiro de 1970 UTC.
- Introduz o Segredo (algoritmos HS, como texto ou Base64/Base64url em Formato do segredo) ou a Chave privada (PEM ou JWK). Ainda não tens chave? Clica em Gerar chave de teste.
- Clica em Assinar token e depois em Copiar, ou em Verificar este token para o testar logo a seguir.
Como verificar um JWT
- Cola o token em Token a verificar.
- Escolhe o Algoritmo esperado. Se deixares «Do cabeçalho do token», é aceite o que o cabeçalho disser, exceto
none; se escolheres um algoritmo concreto, a ferramenta recusa qualquer token assinado de outra forma, como faria um servidor bem configurado. - Introduz o segredo ou a Chave pública (PEM ou JWK): um bloco PEM
PUBLIC KEY,RSA PUBLIC KEYouCERTIFICATE, um JWK ou um JWK Set (é usada a chave cujokidcoincide com o do cabeçalho). - Se quiseres, define uma Tolerância de relógio (segundos) para aceitar pequenas diferenças entre relógios e clica em Verificar token.
O resultado indica se a assinatura é válida e depois compara exp (expiração) e nbf (não antes de) com a hora atual do teu computador. Um token com assinatura correta mas com expiração no passado é apresentado como expirado, não como válido.
Chaves e formatos
Para assinar, a ferramenta aceita blocos PKCS#8 PRIVATE KEY, PKCS#1 RSA PRIVATE KEY e SEC1 EC PRIVATE KEY (convertidos internamente para PKCS#8), bem como JWK privados. As chaves protegidas por palavra-passe têm de ser exportadas primeiro sem palavra-passe. Gerar chave de teste cria um segredo aleatório do tamanho do hash para os algoritmos HS, um par de chaves RSA de 2048 bits para RS e PS, a curva correspondente para ES ou um par Ed25519. Recebes as chaves em PEM e JWK, e elas são preenchidas dos dois lados para que possas assinar e verificar de imediato.
As assinaturas seguem o RFC 7515 e o RFC 7518: o RSA-PSS usa um salt do comprimento do hash e as assinaturas ECDSA são a concatenação bruta r||s. A implementação reproduz o exemplo HS256 do RFC 7515, anexo A.1.
Notas de segurança
- Tudo corre no teu navegador com a API Web Crypto. Nem os tokens nem as chaves são enviados para lado nenhum, mas prefere mesmo assim chaves de teste a segredos de produção.
alg: nonenunca é assinado nem aceite.- Os segredos HMAC devem ter pelo menos o comprimento do hash (32 bytes para HS256). Um segredo mais curto gera um aviso.
- Uma assinatura prova a integridade e a origem, não que as claims sejam adequadas: os servidores têm ainda de verificar
iss,aude os scopes.
Perguntas frequentes
Qual é a diferença entre HS256 e RS256?
O HS256 usa um único segredo partilhado para assinar e verificar, por isso qualquer verificador também poderia forjar tokens. O RS256 (e também PS256, ES256 e EdDSA) assina com uma chave privada e verifica com uma chave pública que pode ser publicada sem risco.
Porque é que uma assinatura válida ainda mostra um erro?
Porque o token está fora do período de validade: exp está no passado ou nbf está no futuro. A verificação da assinatura e a verificação do tempo são apresentadas em separado.
Porque é que alg «none» é recusado?
Qualquer pessoa pode criar um token sem assinatura. Aceitá-lo foi uma vulnerabilidade clássica das bibliotecas JWT, por isso esta ferramenta rejeita-o tanto ao assinar como ao verificar.
Posso usar a minha própria chave RSA ou EC?
Sim. Cola a chave privada em PEM ou JWK para assinar e a chave pública para verificar. A ferramenta confirma que o tipo de chave e a curva correspondem ao algoritmo escolhido.
Porque é que o EdDSA está desativado?
O teu navegador ainda não suporta Ed25519 na Web Crypto. As versões recentes do Chrome, Edge, Firefox e Safari já o suportam.
Ferramentas relacionadas
- Descodificador de JWT Descodifica o cabeçalho e o payload de um JWT, lê exp, iat e nbf como datas e verifica assinaturas HS256, RS256, ES256 ou EdDSA no teu navegador.
- Gerador de HMAC Calcula um HMAC-SHA1, SHA-256, SHA-384 ou SHA-512 com chave em texto, hex ou Base64, obtém hex e Base64 e verifica a assinatura de um webhook.
- Conversor de timestamp Unix Converte timestamps Unix em segundos ou milissegundos em datas legíveis na hora local, em UTC e em ISO 8601, e transforma qualquer data em tempo epoch.
- Formatador e validador de JSON Formatador e validador de JSON gratuito que formata, minifica e verifica JSON no teu navegador, com os erros de sintaxe indicados por linha e coluna.