Skip to content

Glossary

JWS

Das Signaturformat hinter JWT

By Published Updated

JWS (JSON Web Signature, RFC 7515) ist das kryptografische Signatur-Framework, auf dem JWT aufbaut. Ein JWS besteht aus drei durch Punkte verbundenen Teilen: header.payload.signature, jedes Segment base64url-kodiert. Der Header ist JSON, das den Algorithmus deklariert; die Nutzlast können beliebige Bytes sein (typischerweise, aber nicht zwingend JSON); die Signatur wird über den durch Punkte verbundenen Header und die Nutzlast mit dem deklarierten Algorithmus berechnet.

Die Beziehung zu JWT: Jedes JWT ist ein JWS, dessen Nutzlast ein JSON-Objekt aus Claims sein muss. Doch JWS selbst ist allgemeiner – die Nutzlast kann rohe Binärdaten, ein XML-Dokument oder jede andere Bytefolge sein. Wenn Sie ein dreiteiliges, durch Punkte getrenntes Token sehen, dessen mittleres Segment sich nicht zu JSON base64-dekodiert, handelt es sich um ein JWS, nicht um ein JWT.

Gängige Algorithmen: HS256 (HMAC-SHA256, symmetrischer Schlüssel), RS256 (RSA-SHA256, asymmetrisch), ES256 (ECDSA-P256-SHA256, asymmetrisch). Der gefährliche Algorithmus „none“ bedeutet „keine Signatur“ – laut Spezifikation zulässig, aber serverseitig immer abzulehnen. Produktive Prüfer sollten zudem explizit prüfen, dass der im Header deklarierte Algorithmus dem für den Schlüssel erwarteten Algorithmus entspricht.

JWS hat zwei Serialisierungen: kompakt (das durch Punkte getrennte Format, das JWT verwendet) und JSON (eine JSON-Hülle, die dieselben drei Teile umschließt und mehrere Signaturen unterstützt). Die kompakte Form ist das, was nahezu jede API verwendet; die JSON-Form ist außerhalb spezifischer Protokolle selten.

Durchgerechnetes Beispiel

Nehmen wir das JWS eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJ1c2VyXzEyMyJ9.4Adcj3UFYzPUVaHwte4eBI6vsjOvpz0yiwIM0F7sjuk. Dekodieren Sie den Header (erstes Segment): {"alg":"HS256"} – HMAC-SHA256-Signatur. Dekodieren Sie die Nutzlast (zweites Segment): {"sub":"user_123"}. Die Signatur (drittes Segment) ist der HMAC-SHA256 von eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJ1c2VyXzEyMyJ9 unter Verwendung des gemeinsamen geheimen Schlüssels. Der Prüfer rekonstruiert den HMAC und vergleicht ihn mittels konstanter Vergleichszeit; bei Abweichung → ablehnen. Vergleichen wir nun mit RS256: gleiche Struktur, doch die Signatur ist RSA-SHA256, der Aussteller signiert mit einem privaten Schlüssel und Prüfer kontrollieren mit dem öffentlichen Schlüssel. Die Token-Bytes sind länger (RSA-Signaturen sind ~342 Base64-Zeichen für einen 2048-Bit-Schlüssel gegenüber 43 bei HMAC-SHA256), doch die Validierungssemantik ist aus Sicht des Aufrufers identisch.

Wann und warum es zählt

JWS zählt jedes Mal, wenn ein Dienst ein JWT ausstellt, überträgt oder annimmt – was 2026 die meisten APIs sind. Die Fehler, die im letzten Jahrzehnt wiederholt CVEs hervorgebracht haben: (1) die Signatur überhaupt nicht zu validieren und die Nutzlast als vertrauenswürdig zu behandeln, nur weil sie sich als JSON parsen ließ; (2) alg: none zu akzeptieren, was die Signatur vollständig entfernt; (3) jeden vom Token deklarierten Algorithmus zu akzeptieren, was den HS256-mit-RSA-öffentlichem-Schlüssel-Verwechslungsangriff ermöglicht; (4) exp nicht zu validieren und so das Wiedereinspielen längst abgelaufener Token zu erlauben; (5) iss und aud nicht zu validieren und Token zu akzeptieren, die für völlig andere Dienste ausgestellt wurden. Die defensive Grundlinie: den erwarteten Algorithmus im Prüfaufruf festlegen, den Prüfschlüssel aus einer vertrauenswürdigen Quelle beziehen (typischerweise eine zur Konfigurationszeit freigegebene JWKS-URL, nicht der tokeneigene jku) und exp, iss und aud als separate Prüfungen nach der Signatur validieren. Quelle: RFC 8725 – JWT Best Current Practices.

Warum der Algorithmus-Verwechslungsangriff immer noch in CVEs auftaucht: Eine langlebige Familie von JWS-Schwachstellen betrifft einen Server, der die JWT-Bibliothek fragt „ist dieses Token gültig?“ und die Bibliothek den Prüfalgorithmus aus dem tokeneigenen Header wählen lässt. Ein Angreifer, der den öffentlichen RSA-Schlüssel des Servers kennt (der definitionsgemäß öffentlich ist), kann ein Token erstellen, das mit HMAC-SHA256 unter Verwendung der Bytes des öffentlichen RSA-Schlüssels als HMAC-Geheimnis signiert ist, im Header alg: HS256 setzen, und viele Bibliotheken werden es verifizieren. Die Gegenmaßnahme besteht darin, die Prüfung auf den erwarteten Algorithmus festzulegen – ihn als explizites Argument an den Verify-Aufruf zu übergeben, statt das Token ihn bestimmen zu lassen. Die Offenlegung dieses Angriffs 2015 gegen mehrere große Bibliotheken (Nodes jsonwebtoken, Pythons pyjwt, mehrere Java-Implementierungen) ist die klassische Warngeschichte.

Detached JWS – wenn die Nutzlast zu groß zum Einbetten ist: RFC 7797 definiert einen „Detached-Payload“-Modus, bei dem das mittlere Segment leer ist und die Nutzlast außerhalb des Bandes übertragen wird (z. B. als HTTP-Body, während das JWS in einem Header sitzt). So signieren einige Finanz-APIs große Anfrage-Bodies, ohne Megabytes an JSON erneut base64-zu-kodieren. Die Signatur wird weiterhin über die ursprünglichen Nutzlast-Bytes berechnet; nur das Übertragungsformat ändert sich. Quelle: RFC 7515 – JSON Web Signature.

Rechner ausprobieren

Dekodieren Sie ein JWS-kodiertes Token, um seine Claims und seinen Signaturalgorithmus zu prüfen.

JWT-Decoder öffnen →

Frequently asked questions

Was ist JWS?
JWS (JSON Web Signature, RFC 7515) ist der Standard, der definiert, wie eine Nutzlast digital signiert wird. Ein gewöhnliches JWT ist ein JWS mit einem JSON-Claims-Objekt als Nutzlast – die Signatur stellt sicher, dass der Inhalt nicht manipuliert wurde.
Wie funktioniert die Signaturprüfung bei JWS?
Der Unterzeichner berechnet eine Signatur über base64url(Header) + '.' + base64url(Nutzlast) mit dem deklarierten Algorithmus und Schlüssel. Der Prüfer berechnet denselben Wert neu und vergleicht ihn mit dem Signatursegment; jede Abweichung bedeutet, dass das Token verändert wurde.
Was ist der Unterschied zwischen kompakter und JSON-Serialisierung bei JWS?
Die kompakte Serialisierung erzeugt die vertraute, durch Punkte getrennte Zeichenkette aus drei Segmenten, die in HTTP-Authorization-Headern verwendet wird. Die JSON-Serialisierung ist ein JSON-Objekt, das mehrere Signaturen für dieselbe Nutzlast tragen kann, nützlich bei der Dokumentensignatur.
Welche JWS-Algorithmen werden empfohlen?
RS256 (RSA + SHA-256) und ES256 (ECDSA + SHA-256) sind weithin empfohlene asymmetrische Optionen, weil sie eine Prüfung mit öffentlichem Schlüssel ohne Weitergabe des Signaturschlüssels erlauben. HS256 (HMAC + SHA-256) ist symmetrisch und nur geeignet, wenn beide Parteien ein Geheimnis sicher teilen.

Related

Published May 16, 2026 · Last reviewed May 31, 2026