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.