Was ist JWT (JSON Web Token)?

Format, um Informationen (Claims) in JSON-Form mit einer Signatur zu übergeben. Die drei Teile „Header.Payload.Signatur“ werden jeweils mit Base64URL kodiert und mit „.“ verbunden. Anhand der Signatur lassen sich Manipulationen und der Aussteller prüfen; bei einem typischen signierten JWT ist die Payload jedoch nicht verschlüsselt, daher gehören keine geheimen Informationen hinein. JWTs werden etwa für Access-Tokens zur Authentifizierung an APIs und für ID-Tokens von OpenID Connect verwendet und erhalten meist eine kurze Ablaufzeit (exp).

Japanische Bezeichnung: JWT(JSON Web Token)

„JWT (JSON Web Token)“ kommt in 2 Übungsfragen aus 1 Themen vor, z. B. Grundlagen der Webtechnologien.

Fachgebiet: Grundlagen der Webtechnologien

Die drei Teile

Der Header enthält das Signaturverfahren (zum Beispiel HS256) und den Typ; {"alg":"HS256","typ":"JWT"} ergibt mit Base64URL kodiert eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9. Die Payload enthält Claims wie die Kennung des Nutzers (sub), den Aussteller (iss) und die Ablaufzeit (exp). Die Signatur wird über den kodierten Header und die kodierte Payload, verbunden mit „.“, berechnet, und zwar mit einem HMAC mit gemeinsamem geheimem Schlüssel oder mit dem privaten Schlüssel eines Verfahrens der Public-Key-Kryptografie.

Prüfung auf dem Server

Ein Server, der ein JWT empfängt, prüft mit dem Schlüssel, ob die Signatur gültig ist, und ob Claims wie die Ablaufzeit und der Empfänger (aud) seine Bedingungen erfüllen. Wichtig ist, dem Wert alg im Header nicht blind zu vertrauen, sondern nur die auf der Serverseite festgelegten Verfahren zu akzeptieren. Ist die Signatur geprüft, kann der Server feststellen, für wen das Token ausgestellt wurde, auch ohne Sitzungsinformationen zu speichern.

Worauf man achten muss

Da sich ein JWT nach der Ausstellung nur schwer widerrufen lässt, erhält es üblicherweise eine kurze Ablaufzeit; für eine längere Nutzung wird es mit einem separaten Wert für die Erneuerung neu ausgestellt. Die Payload kann jeder lesen, daher gehören keine geheimen Informationen hinein. Je nachdem, wo es im Browser gespeichert wird, kann es über XSS gestohlen werden.

Jetzt üben: Fragen zu JWT (JSON Web Token)

Welche Aussage über ein typisches signiertes JWT (JSON Web Token) ist richtig?

  1. ADie Payload ist mit dem Signaturschlüssel verschlüsselt; selbst wenn man Passwörter oder Kreditkartennummern hineinschreibt, kann sie unterwegs niemand lesen
  2. BAuch ein abgelaufenes Token muss der Server akzeptieren, solange die Signatur gültig ist, denn es wurde nicht manipuliert
  3. CEs besteht aus Header, Payload und Signatur, die jeweils mit Base64URL kodiert und mit „.“ verbunden werden; die Signatur macht Manipulationen erkennbar, der Inhalt ist aber nicht verschlüsselt
Antwort und Erläuterung anzeigen

Antwort: C. Es besteht aus Header, Payload und Signatur, die jeweils mit Base64URL kodiert und mit „.“ verbunden werden; die Signatur macht Manipulationen erkennbar, der Inhalt ist aber nicht verschlüsselt

Ein JWT besteht aus den drei Teilen „Header.Payload.Signatur“: Der Header enthält das Signaturverfahren (zum Beispiel HS256), die Payload Informationen (Claims) wie die Kennung des Nutzers und die Ablaufzeit (exp). Die Signatur wird aus Header und Payload mit einem geheimen Schlüssel erzeugt, sodass ein Server, der das Token empfängt, prüfen kann, dass der Inhalt nicht manipuliert wurde und wer es ausgestellt hat. Base64URL ist jedoch keine Verschlüsselung; jeder kann es zurückwandeln und lesen, daher werden keine geheimen Informationen hineingeschrieben. An eine API wird das Token im Allgemeinen nach Authorization: Bearer gesendet.

Häufige Fragen

Soll ich ein JWT oder eine Sitzungs-ID verwenden?

Eine Sitzungs-ID ist nur ein Schlüssel, mit dem auf dem Server gespeicherte Informationen gefunden werden; Abmeldungen und Sperrungen wirken daher auf der Serverseite sofort. Ein JWT lässt sich prüfen, ohne Informationen auf dem Server zu speichern, und eignet sich deshalb für die Übergabe zwischen mehreren Diensten, hat aber die Schwäche, schwer widerrufbar zu sein. Für die Anmeldung bei einer einzelnen Website ist eine Sitzungs-ID oft einfacher zu handhaben.

Was ist der Unterschied zwischen Base64URL und Base64?

Base64URL ist eine Variante von Base64, die „+“ und „/“, die in URLs eine besondere Bedeutung haben, durch „-“ und „_“ ersetzt und das abschließende „=“ oft weglässt. JWTs verwenden diese Form, damit sie unverändert in URLs und HTTP-Header gesetzt werden können. Beides ist keine Verschlüsselung; jeder kann es zurückwandeln.

„JWT (JSON Web Token)“ in den Erläuterungen

Fragen mit „JWT (JSON Web Token)“ (2)

  1. Welche Aussage über ein typisches signiertes JWT (JSON Web Token) ist richtig?
  2. Welche Aussage über die Beziehung zwischen OAuth (Version 2.0) und OpenID Connect ist richtig?

Verwandte Begriffe

OAuth Cookie (HTTP-Cookie) CORS (Cross-Origin Resource Sharing) DOM (Document Object Model) Event Loop HTTP (Hypertext Transfer Protocol) HTTP-Methode HTTP-Statuscode JSON (JavaScript Object Notation) REST-API

Zur Glossarübersicht