Zum Hauptinhalt springen

3. JSON Web Signature (JWS) Overview (Überblick)

JWS repräsentiert digital signierte oder MAC-geschützte Inhalte unter Verwendung von JSON-Datenstrukturen und base64url-Codierung. Diese JSON-Datenstrukturen können (MAY) Leerzeichen und/oder Zeilenumbruchzeichen vor oder nach jedem JSON-Wert oder Strukturzeichen gemäß Abschnitt 2 von RFC 7159 [RFC7159] enthalten. Ein JWS repräsentiert die folgenden logischen Werte (jeder Wert ist in Abschnitt 2 definiert):

  • JOSE Header
  • JWS Payload
  • JWS Signature

Für ein JWS sind die Mitglieder des JOSE-Headers die Vereinigung der Mitglieder der folgenden Werte (jeder Wert ist in Abschnitt 2 definiert):

  • JWS Protected Header
  • JWS Unprotected Header

Dieses Dokument definiert zwei Serialisierungen für JWS: eine kompakte, URL-sichere Serialisierung namens JWS Compact Serialization und eine JSON-Serialisierung namens JWS JSON Serialization. In beiden Serialisierungen sind der JWS Protected Header, der JWS Payload und die JWS Signature base64url-codiert, da JSON keine Möglichkeit hat, beliebige Oktettsequenzen direkt darzustellen.

3.1 JWS Compact Serialization Overview (Überblick über JWS Compact Serialization)​

In der JWS Compact Serialization wird kein JWS Unprotected Header verwendet. In diesem Fall sind der JOSE-Header und der JWS Protected Header identisch.

In der JWS Compact Serialization wird ein JWS als folgende Verkettung dargestellt:

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

Siehe Abschnitt 7.1 für weitere Informationen zur JWS Compact Serialization.

3.2 JWS JSON Serialization Overview (Überblick über JWS JSON Serialization)​

In der JWS JSON Serialization müssen (MUST) einer oder beide vom JWS Protected Header und JWS Unprotected Header vorhanden sein. In diesem Fall sind die Mitglieder des JOSE-Headers die Vereinigung der Mitglieder der vorhandenen JWS Protected Header- und JWS Unprotected Header-Werte.

In der JWS JSON Serialization wird ein JWS als JSON-Objekt dargestellt, das einige oder alle der folgenden vier Mitglieder enthält:

  • "protected", mit dem Wert BASE64URL(UTF8(JWS Protected Header))
  • "header", mit dem Wert JWS Unprotected Header
  • "payload", mit dem Wert BASE64URL(JWS Payload)
  • "signature", mit dem Wert BASE64URL(JWS Signature)

Diese drei resultierenden base64url-codierten Strings und der JWS Unprotected Header-Wert werden als Mitglieder des JSON-Objekts dargestellt. Die Einbeziehung einiger dieser Werte ist optional (OPTIONAL). Die JWS JSON Serialization kann auch mehrere Signatur- und/oder MAC-Werte anstelle von nur einem darstellen. Siehe Abschnitt 7.2 für weitere Informationen zur JWS JSON Serialization.

3.3 Example JWS (Beispiel-JWS)​

Dieser Abschnitt bietet ein Beispiel für JWS. Seine Berechnung wird ausführlicher in Anhang A.1 beschrieben, einschließlich der Spezifikation der exakten verwendeten JSON-Werte zur Darstellung der Oktette und der verwendeten Schlüsselwerte.

Der folgende Beispiel-JWS Protected Header erklärt, dass das codierte Objekt ein JSON Web Token [JWT] ist und dass der JWS Protected Header und der JWS Payload mit dem HMAC SHA-256-Algorithmus [RFC2104] [SHS] integritätsgeschützt sind:

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

Die Codierung dieses JWS Protected Header als BASE64URL(UTF8(JWS Protected Header)) ergibt diesen Wert:

eyJ0eXAiOiJKV1QiLA0KICJhbGciOiJIUzI1NiJ9

Die UTF-8-Darstellung des folgenden JSON-Objekts wird als JWS Payload verwendet. (Beachten Sie, dass der Payload beliebiger Inhalt sein kann und keine Darstellung eines JSON-Objekts sein muss.)

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

Die Codierung dieses JWS Payload als BASE64URL(JWS Payload) ergibt diesen Wert (mit Zeilenumbrüchen zur Anzeige):

eyJpc3MiOiJqb2UiLA0KICJleHAiOjEzMDA4MTkzODAsDQogImh0dHA6Ly9leGFt
cGxlLmNvbS9pc19yb290Ijp0cnVlfQ

Die Berechnung der JWS Signature in der für den HMAC SHA-256-Algorithmus definierten Weise über die JWS-Signing-Eingabe ASCII(BASE64URL(UTF8(JWS Protected Header)) || '.' || BASE64URL(JWS Payload)) mit den HMAC-Schlüssel-Oktetten ergibt diesen Wert:

dBjftJeZ4CVP-mB92K27uhbUJU1p1r_wW1gFWFOEjXk

Die Codierung dieses JWS mit der JWS Compact Serialization erzeugt dieses vollständige JWS (mit Zeilenumbrüchen zur Anzeige):

eyJ0eXAiOiJKV1QiLA0KICJhbGciOiJIUzI1NiJ9
.
eyJpc3MiOiJqb2UiLA0KICJleHAiOjEzMDA4MTkzODAsDQogImh0dHA6Ly9leGFt
cGxlLmNvbS9pc19yb290Ijp0cnVlfQ
.
dBjftJeZ4CVP-mB92K27uhbUJU1p1r_wW1gFWFOEjXk

Siehe Anhang A für weitere JWS-Beispiele.