Passa al contenuto principale

3. JSON Web Signature (JWS) Overview (Panoramica)

JWS rappresenta contenuti firmati digitalmente o protetti da MAC utilizzando strutture dati JSON e codifica base64url. Queste strutture dati JSON possono (MAY) contenere spazi bianchi e/o caratteri di interruzione di riga prima o dopo qualsiasi valore o carattere strutturale JSON, conformemente alla sezione 2 di RFC 7159 [RFC7159]. Un JWS rappresenta i seguenti valori logici (ciascun valore è definito nella sezione 2):

  • JOSE Header
  • JWS Payload
  • JWS Signature

Per un JWS, i membri dell'header JOSE sono l'unione dei membri dei seguenti valori (ciascun valore è definito nella sezione 2):

  • JWS Protected Header
  • JWS Unprotected Header

Questo documento definisce due serializzazioni per JWS: una serializzazione compatta e URL-safe chiamata JWS Compact Serialization e una serializzazione JSON chiamata JWS JSON Serialization. In entrambe le serializzazioni, il JWS Protected Header, il JWS Payload e la JWS Signature sono codificati in base64url, poiché JSON non ha modo di rappresentare direttamente sequenze di ottetti arbitrarie.

3.1 JWS Compact Serialization Overview (Panoramica della serializzazione compatta JWS)​

Nella JWS Compact Serialization, non viene utilizzato alcun JWS Unprotected Header. In questo caso, l'header JOSE e il JWS Protected Header sono identici.

Nella JWS Compact Serialization, un JWS è rappresentato come la seguente concatenazione:

BASE64URL(UTF8(JWS Protected Header)) || '.' ||
BASE64URL(JWS Payload) || '.' ||
BASE64URL(JWS Signature)

Vedere la sezione 7.1 per ulteriori informazioni sulla JWS Compact Serialization.

3.2 JWS JSON Serialization Overview (Panoramica della serializzazione JSON JWS)​

Nella JWS JSON Serialization, uno o entrambi tra JWS Protected Header e JWS Unprotected Header devono (MUST) essere presenti. In questo caso, i membri dell'header JOSE sono l'unione dei membri dei valori JWS Protected Header e JWS Unprotected Header presenti.

Nella JWS JSON Serialization, un JWS è rappresentato come un oggetto JSON contenente alcuni o tutti i seguenti quattro membri:

  • "protected", con il valore BASE64URL(UTF8(JWS Protected Header))
  • "header", con il valore JWS Unprotected Header
  • "payload", con il valore BASE64URL(JWS Payload)
  • "signature", con il valore BASE64URL(JWS Signature)

Queste tre stringhe risultanti codificate in base64url e il valore JWS Unprotected Header sono rappresentati come membri dell'oggetto JSON. L'inclusione di alcuni di questi valori è opzionale (OPTIONAL). La JWS JSON Serialization può anche rappresentare più valori di firma e/o MAC, anziché solo uno. Vedere la sezione 7.2 per ulteriori informazioni sulla JWS JSON Serialization.

3.3 Example JWS (Esempio JWS)​

Questa sezione fornisce un esempio di JWS. Il suo calcolo è descritto più in dettaglio nell'appendice A.1, inclusa la specifica dei valori JSON esatti utilizzati per rappresentare gli ottetti e i valori delle chiavi utilizzati.

Il seguente esempio di JWS Protected Header dichiara che l'oggetto codificato è un JSON Web Token [JWT] e che il JWS Protected Header e il JWS Payload sono protetti in integrità utilizzando l'algoritmo HMAC SHA-256 [RFC2104] [SHS]:

{"typ":"JWT",
"alg":"HS256"}

La codifica di questo JWS Protected Header come BASE64URL(UTF8(JWS Protected Header)) produce questo valore:

eyJ0eXAiOiJKV1QiLA0KICJhbGciOiJIUzI1NiJ9

La rappresentazione UTF-8 del seguente oggetto JSON viene utilizzata come JWS Payload. (Si noti che il payload può essere qualsiasi contenuto e non deve essere una rappresentazione di un oggetto JSON.)

{"iss":"joe",
"exp":1300819380,
"http://example.com/is_root":true}

La codifica di questo JWS Payload come BASE64URL(JWS Payload) produce questo valore (con interruzioni di riga per scopi di visualizzazione):

eyJpc3MiOiJqb2UiLA0KICJleHAiOjEzMDA4MTkzODAsDQogImh0dHA6Ly9leGFt
cGxlLmNvbS9pc19yb290Ijp0cnVlfQ

Il calcolo della JWS Signature nel modo definito per l'algoritmo HMAC SHA-256 sull'input di firma JWS ASCII(BASE64URL(UTF8(JWS Protected Header)) || '.' || BASE64URL(JWS Payload)) con gli ottetti della chiave HMAC produce questo valore:

dBjftJeZ4CVP-mB92K27uhbUJU1p1r_wW1gFWFOEjXk

La codifica di questo JWS con la JWS Compact Serialization produce questo JWS completo (con interruzioni di riga per scopi di visualizzazione):

eyJ0eXAiOiJKV1QiLA0KICJhbGciOiJIUzI1NiJ9
.
eyJpc3MiOiJqb2UiLA0KICJleHAiOjEzMDA4MTkzODAsDQogImh0dHA6Ly9leGFt
cGxlLmNvbS9pc19yb290Ijp0cnVlfQ
.
dBjftJeZ4CVP-mB92K27uhbUJU1p1r_wW1gFWFOEjXk

Vedere l'appendice A per ulteriori esempi di JWS.