Verificar um JWKS antes de o publicar
Antes de colocar /.well-known/jwks.json online, confirme que nenhuma chave contém d ou k e que cada uma tem um kid único.
Cole uma JWK ou um JWKS para obter uma tabela por chave (kid, kty, alg, use, key_ops, impressão SHA-256 RFC 7638) e avisos: kty ou kid em falta, kid duplicado, material de chave privada publicado por engano.
Avisos
| # | kid | kty | alg | use | key_ops | Natureza | Impressão SHA-256 (RFC 7638) |
|---|
O inspetor JWK / JWKS torna legível um conjunto de chaves JSON Web Key, como o publicado no jwks_uri de um fornecedor OpenID Connect. Destina-se a programadores e equipas de segurança que publicam ou consomem um JWKS e pretendem ver rapidamente que chaves contém, como são identificadas e se algum dado privado foi incluído por engano.
Uma JWK (RFC 7517) descreve uma chave em JSON: kty indica a família (RSA, EC, oct), kid o identificador, alg o algoritmo previsto, use a utilização (sig para assinatura, enc para cifragem) e key_ops as operações permitidas. Um JWKS é simplesmente um objeto {"keys":[…]} que agrupa várias. A ferramenta aceita as duas formas, apresenta uma linha por chave e resume o número de chaves, os tipos presentes e os kid distintos. Calcula também a impressão RFC 7638 de cada chave: o hash SHA-256, codificado em Base64URL, de um JSON canónico que contém apenas os membros obrigatórios por ordem alfabética, ou seja e, kty e n para RSA, crv, kty, x e y para EC, e k e kty para uma chave simétrica.
Os avisos visam erros reais de publicação: kty em falta (a chave é inutilizável), kid em falta quando o conjunto tem várias chaves (o verificador não sabe qual usar), kid duplicado e, sobretudo, presença de material privado. Em RSA, os membros d, p, q, dp, dq e qi constituem a chave privada; em EC é d; numa chave simétrica oct, o membro k é o próprio segredo. Um JWKS público só deve conter chaves públicas; caso contrário, qualquer pessoa pode assinar tokens em seu nome. O resultado pode ser exportado em JSON.
Cole uma chave isolada {"kty":…} ou um conjunto completo {"keys":[…]}, por exemplo copiado do jwks_uri do seu fornecedor.
Para cada chave, consulte kid, kty, alg, use, key_ops e a impressão SHA-256 RFC 7638, bem como o resumo com o número de chaves, os tipos e os kid distintos.
Corrija kty ou kid em falta e kid duplicados, retire qualquer dado privado e exporte o resultado em JSON se necessário.
Antes de colocar /.well-known/jwks.json online, confirme que nenhuma chave contém d ou k e que cada uma tem um kid único.
Cole o JWKS do seu fornecedor (Auth0, Keycloak, Entra ID, Google) durante uma rotação para ver a chave antiga e a nova lado a lado, com o respetivo kid e impressão.
Compare o kid do cabeçalho de um JWT com os do JWKS para identificar a chave esperada e verifique depois a assinatura com o verificador JWT.
Uma JWK é uma única chave representada em JSON, com campos como kty, n, e ou x e y. Um JWKS (JSON Web Key Set) é um objeto {"keys":[…]} que contém uma lista de JWK, normalmente publicado por um servidor de autorização para que os clientes verifiquem os seus tokens.
É um identificador calculado segundo a RFC 7638: o SHA-256 de um JSON canónico que contém apenas os membros obrigatórios da chave pública, codificado em Base64URL. Duas representações da mesma chave dão sempre a mesma impressão, e a impressão de uma chave privada é a da sua chave pública. Muitos fornecedores usam-na como kid.
A RFC 7517 torna-o opcional, mas logo que um JWKS contém várias chaves passa a ser indispensável: é o kid do cabeçalho do JWT que permite escolher a chave certa. Sem ele, o verificador tem de experimentar todas as chaves, o que muitas bibliotecas recusam.
Uma JWK RSA é privada se contiver d (e muitas vezes p, q, dp, dq, qi); uma JWK EC é privada se contiver d; uma chave oct guarda sempre o segredo em k. A ferramenta assinala estes membros. Uma chave pública RSA contém apenas kty, n e e, além de metadados opcionais.
RSA é uma chave RSA usada, por exemplo, com RS256 ou PS256; EC é uma chave de curva elíptica (P-256, P-384, P-521) usada com ES256, ES384 ou ES512; oct é uma chave simétrica, isto é, uma sequência secreta de bytes usada com HS256 ou para cifragem AES.
use indica a utilização geral da chave: sig para assinatura, enc para cifragem. key_ops enumera com precisão as operações permitidas, como verify, sign, encrypt ou wrapKey. A RFC 7517 recomenda não usar os dois em simultâneo ou, se o fizer, mantê-los coerentes.
Ferramentas relacionadas
Ferramentas semelhantes ou complementares a esta.
Verifique a assinatura de um JWT com um segredo HMAC ou uma chave pública JWK, JWKS ou PEM e controle exp, nbf, iss e aud.
Descodifique um JWT para ler o cabeçalho, o payload, os claims e as datas de expiração.
Gere um code_verifier PKCE, o respetivo code_challenge S256 e um state para o seu pedido de autorização OAuth.
Entenda como OAuth 2.0, PKCE, JWT, JWK e JWKS se relacionam: autorização, tokens, chaves públicas e verificação.
Saiba quando usar criptografia, hashing, HMAC ou PBKDF2 para confidencialidade, integridade, autenticação e senhas.
Saiba o que contém um JWT, o que a sua assinatura prova realmente e porque descodificar um token não equivale a verificá-lo.
Aprenda a construir uma CSP progressiva, compreender as suas diretivas e evitar políticas demasiado permissivas ou que quebram o site.