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.