Logo Logo
GitHub Designed by Logto

Cos’è una Chiave Web JSON (JWK)?

Una Chiave Web JSON (JWK) è un formato basato su JSON utilizzato per rappresentare chiavi crittografiche. È ampiamente utilizzato nel contesto di Firma Web JSON (JWS) e Crittografia Web JSON (JSON Web Encryption, JWE) per convalidare l’integrità e la riservatezza dei JSON Web Tokens . Viene anche utilizzato in OpenID Connect (OIDC) per la gestione delle identità e degli accessi (iam).

Ad esempio, una chiave pubblica ECDSA codificata in PEM:

-----BEGIN PUBLIC KEY-----
MHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEF/xQdbOho2Jw0hgmNPD0VAEPAgkQrfD4
f1Qx3y49cUm646fMBX9DYx+43HzXm6VdX77uFymz90aO4dBunpTdUzLFRAiT7+In
gzZGDrIE+FG6CcqQuRP65r65SUzDOmP5
-----END PUBLIC KEY-----

…può essere rappresentata come una JWK:

{
  "kty": "EC",
  "crv": "P-384",
  "x": "F_xQdbOho2Jw0hgmNPD0VAEPAgkQrfD4f1Qx3y49cUm646fMBX9DYx-43HzXm6Vd",
  "y": "X77uFymz90aO4dBunpTdUzLFRAiT7-IngzZGDrIE-FG6CcqQuRP65r65SUzDOmP5"
}

Come funziona una JWK?

Poiché JWK è un formato basato su JSON, può trasportare metadati ricchi sulla chiave rispetto ai formati tradizionali come PEM. Ecco alcuni attributi comuni in una JWK:

  • kty (Tipo di Chiave): La famiglia di algoritmi crittografici utilizzata con la chiave. I valori comuni includono RSA, EC e oct. EC è stato contrassegnato come “Raccomandato+” in RFC 7518 .
  • use (Uso della Chiave Pubblica): L’uso previsto della chiave pubblica. I valori comuni includono sig (firma) e enc (crittografia).
  • key_ops (Operazioni della Chiave): Le operazioni supportate dalla chiave. I valori comuni includono sign, verify, encrypt e decrypt.
  • alg (Algoritmo): L’algoritmo previsto per l’uso con la chiave. A seconda del tipo di chiave, l’algoritmo può variare. Ad esempio, RS256 può essere utilizzato con una chiave RSA, mentre ES256 può essere utilizzato con una chiave EC.
  • kid (ID della Chiave): Un identificatore univoco per la chiave. Può essere utilizzato per abbinare una chiave specifica in un set di chiavi.

Ad eccezione di kty, tutti gli altri attributi sono opzionali e possono essere utilizzati per fornire un contesto aggiuntivo sulla chiave. A seconda del valore di kty, altri attributi possono essere richiesti o opzionali. Nell’esempio sopra, la JWK rappresenta una chiave ECDSA (kty: "EC") con una curva di P-384 (crv: "P-384"). Gli attributi x e y contengono le coordinate della chiave pubblica.

Ecco un altro esempio non normativo di una JWK di chiave pubblica RSA:

{
  "kty": "RSA",
  "use": "sig",
  "alg": "RS256",
  "n": "0vx7agoebGcQSuuPiLJXZpt...-TmV4HCA1T8jXg3fE2VbA",
  "e": "AQAB",
  "kid": "2011-04-29-1234"
}

Per informazioni dettagliate sugli attributi JWK e i loro significati, fare riferimento a RFC 7517 .

Set di Chiavi Web JSON (JWKS)

Quando più JWK devono essere raggruppati insieme, vengono organizzati in un Set di Chiavi Web JSON (JWKS). Un JWKS è un oggetto JSON che contiene un array di JWK. È comunemente utilizzato nella risposta dell’endpoint jwks_uri in Scoperta di OpenID Connect (OIDC) per fornire le chiavi pubbliche per la convalida della Chiave di firma dei JWT.

Ecco un esempio non normativo di un JWKS contenente due JWK:

{
  "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"
    }
  ]
}

In questo esempio, il JWKS contiene due JWK: una chiave RSA e una chiave EC. L’attributo keys è un array di JWK, ciascuna rappresentante una chiave diversa.

Vedi anche