Uma JWK (JSON Web Key) descreve uma única chave como um objeto JSON. Ao lado do material bruto da chave estão parâmetros de metadados que dizem a um consumidor o que a chave é e como se referir a ela.
Os parâmetros comuns
kty(key type) é o único membro obrigatório: RSA, EC, OKP ou oct. Ele determina quais outros membros estão presentes.usediz se a chave é para assinaturas (sig) ou criptografia (enc), ekey_opspode listar operações específicas. Um verificador deve honrá-los e não, digamos, criptografar com uma chave de assinatura.algnomeia o algoritmo pretendido, como RS256 ou ES256.kid(key ID) é um rótulo usado para escolher a chave certa de um conjunto. Quando um header de JWT carrega umkid, o verificador o compara com okidna JWKS.- Membros específicos do tipo carregam a chave de fato:
neepara RSA,crv/x/ypara EC,crv/xpara OKP. Os opcionaisx5cex5tembutem ou dão fingerprint de um certificado X.509 para a chave.
Thumbprints
Um kid é apenas uma string escolhida, então dois sistemas podem rotular a mesma chave de formas diferentes. Um thumbprint de JWK (RFC 7638) resolve isso computando um identificador a partir da própria chave: ele pega os membros obrigatórios para o tipo da chave, em uma ordem fixa e sem espaço em branco (uma forma canônica de JSON), e os hasheia, normalmente com SHA-256. Como a entrada é canônica, a mesma chave sempre produz o mesmo thumbprint, independentemente da ordem dos membros ou de metadados extras.
Isso torna os thumbprints úteis como identificadores de chave estáveis e resistentes a colisão: muitos sistemas definem kid como o thumbprint para que o rótulo seja derivado da chave em vez de atribuído à mão. Também permite confirmar que uma chave em um lugar é a mesma de outro comparando thumbprints em vez de comparar cada campo. O ponto-chave é que um thumbprint é derivado do conteúdo e determinístico, que é exatamente o que uma serialização canônica compra.