O que é uma Chave da Web JSON (JWK)?
Uma Chave da Web JSON (JWK) é um formato baseado em JSON usado para representar chaves criptográficas. É amplamente utilizada no contexto de Assinatura Web JSON (JWS) e JSON Web Encryption (JWE) para validar a integridade e confidencialidade dos JSON Web Tokens . Também é usada em OpenID Connect (OIDC) para gestão de identidade e acesso (iam).
Por exemplo, uma chave pública ECDSA codificada em PEM:
-----BEGIN PUBLIC KEY-----
MHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEF/xQdbOho2Jw0hgmNPD0VAEPAgkQrfD4
f1Qx3y49cUm646fMBX9DYx+43HzXm6VdX77uFymz90aO4dBunpTdUzLFRAiT7+In
gzZGDrIE+FG6CcqQuRP65r65SUzDOmP5
-----END PUBLIC KEY-----
…pode ser representada como uma JWK:
{
"kty": "EC",
"crv": "P-384",
"x": "F_xQdbOho2Jw0hgmNPD0VAEPAgkQrfD4f1Qx3y49cUm646fMBX9DYx-43HzXm6Vd",
"y": "X77uFymz90aO4dBunpTdUzLFRAiT7-IngzZGDrIE-FG6CcqQuRP65r65SUzDOmP5"
}
Como funciona uma JWK?
Como a JWK é um formato baseado em JSON, ela pode transportar metadados ricos sobre a chave em comparação com formatos tradicionais como PEM. Aqui estão alguns atributos comuns em uma JWK:
kty
(Tipo de Chave): A família de algoritmos criptográficos usada com a chave. Valores comuns incluemRSA
,EC
eoct
.EC
foi marcado como “Recomendado+” no RFC 7518 .use
(Uso da Chave Pública): O uso pretendido da chave pública. Valores comuns incluemsig
(assinatura) eenc
(encriptação).key_ops
(Operações da Chave): As operações de chave suportadas pela chave. Valores comuns incluemsign
,verify
,encrypt
edecrypt
.alg
(Algoritmo): O algoritmo pretendido para uso com a chave. Dependendo do tipo de chave, o algoritmo pode variar. Por exemplo,RS256
pode ser usado com uma chave RSA, enquantoES256
pode ser usado com uma chave EC.kid
(ID da Chave): Um identificador único para a chave. Pode ser usado para corresponder a uma chave específica em um conjunto de chaves.
Exceto kty
, todos os outros atributos são opcionais e podem ser usados para fornecer contexto adicional sobre a chave. De acordo com o valor de kty
, outros atributos podem ser obrigatórios ou opcionais. No exemplo acima, a JWK representa uma chave ECDSA (kty: "EC"
) com uma curva de P-384 (crv: "P-384"
). Os atributos x
e y
contêm as coordenadas da chave pública.
Aqui está outro exemplo não normativo de uma JWK de chave pública RSA:
{
"kty": "RSA",
"use": "sig",
"alg": "RS256",
"n": "0vx7agoebGcQSuuPiLJXZpt...-TmV4HCA1T8jXg3fE2VbA",
"e": "AQAB",
"kid": "2011-04-29-1234"
}
Para informações detalhadas sobre os atributos JWK e seus significados, consulte o RFC 7517 .
Conjunto de Chaves da Web JSON (JWKS)
Quando várias JWKs precisam ser agrupadas, elas são organizadas em um Conjunto de Chaves da Web JSON (JWKS). Um JWKS é um objeto JSON que contém uma matriz de JWKs. É comumente usado na resposta do endpoint jwks_uri
em Descoberta do OpenID Connect (OIDC) para fornecer as chaves públicas para validação da chave de assinatura de JWT.
Aqui está um exemplo não normativo de um JWKS contendo duas JWKs:
{
"keys": [
{
"kty": "RSA",
"use": "sig",
"alg": "RS256",
"n": "0vx7agoebGcQSuuPiLJXZpt...-TmV4HCA1T8jXg3fE2VbA",
"e": "AQAB",
"kid": "2011-04-29-1234"
},
{
"kty": "EC",
"crv": "P-384",
"x": "F_xQdbOho2Jw0hgmNPD0VAEPAgkQrfD4f1Qx3y49cUm646fMBX9DYx-43HzXm6Vd",
"y": "X77uFymz90aO4dBunpTdUzLFRAiT7-IngzZGDrIE-FG6CcqQuRP65r65SUzDOmP5"
}
]
}
Neste exemplo, o JWKS contém duas JWKs: uma chave RSA e uma chave EC. O atributo keys
é uma matriz de JWKs, cada uma representando uma chave diferente.