JSON Web Token (JWT)

Ein JSON Web Token (JWT) ist ein kompaktes Format zur Übertragung von Informationen, um die Identität einer Entität zu verifizieren und die Datenintegrität sicherzustellen.

3. Feb 20269 min Lesezeit

Was ist ein JSON Web Token (JWT)

Ein JSON Web Token, kurz JWT, ist ein genormtes Access-Token, das einen sicheren Austausch von Daten in Form von JSON-Objekten zwischen zwei Parteien ermöglicht. Da es alle wichtigen Informationen über eine Entität enthält, muss keine Datenbankabfrage erfolgen und die Session muss nicht auf dem Server gespeichert werden. Verifiziert durch eine digitale Signatur, werden JWTs häufig zur Authentifizierung und Autorisierung eingesetzt, wie z.B. zur Aktivierung von Single Sign-On (SSO)-Prozessen oder zur Sicherung von APIs. Durch die kompakte Struktur in Kombination mit der kryptografischen Validierung bieten JWTs eine robuste Option, um die Kommunikation zwischen den Beteiligten abzusichern.

Definiert und standardisiert sind JSON Web Tokens in der Spezifikation RFC 7519. RFC steht dabei für “Request for Comments”, das eine Reihe von nummerierten Dokumenten beschreibt, die Internetstandards, Protokolle und Konzepte definiert. Diese dienen als Grundlage für die Kommunikation zwischen verschiedenen Geräten im Internet.

JSON Web Tokens bestehen aus dem Textformat JSON und aus digitalen Berechtigungsnachweisen in Form von Token.

JSON

JSON steht für JavaScript Object Notation einem offenen und sprachunabhängigen Textformat, mit dem sich Daten speichern und übertragen lassen. Durch seine einfache Anwendung ist es ideal für Webanwendungen und APIs, da Menschen es leicht verstehen und es für Maschinen leicht zu generieren oder zu parsen ist.

Token

Token sind digitale Berechtigungsnachweise, die aus modernen Authentifizierungssystemen nicht mehr wegzudenken sind. Sie speichern die Identität und die Berechtigung eines Nutzers in einer kompakten und sicheren Form und stellen sicher, dass nur autorisierte Nutzer auf geschützte Ressourcen zugreifen können.

Aufbau des JSON Web Token

Ein signiertes JSON Web Token ist ein einfacher Zeichenstring, der aus drei Teilen besteht, die durch Punkte getrennt und in Base64 kodiert sind. Nutzer selbst sehen die Zeichenkette eines JSON Web Token in der Regel nicht. Aber sie interagieren damit bei der Nutzung einer Website oder Anwendung, die im Hintergrund JWTs verwendet. Die drei Teile, aus denen ein JSON Web Token bestehen sind Header, Payload und Signatur.

Der Header, der meist aus zwei Teilen besteht, liefert wichtige Informationen über das Token. Er beschreibt, um welchen Token-Typ es sich handelt und welche Signatur- und/oder Verschlüsselungsmethode zum Einsatz kommt.

Payload

Der Payload enthält die tatsächlichen Nutzerinformationen, die an die Anwendung übermittelt werden sollen. Das können zum Beispiel Benutzer-ID, Name oder Ablaufzeit sein. Bereitgestellt als Key-/Value-Paare, werden diese Informationen auch als Claims bezeichnet, wobei hier eine Unterscheidung zwischen privaten, öffentlichen und registrierten Claims stattfindet. Payloads können dabei beliebig viele Claims enthalten. Je größer aber das JSON Web Token wird, desto mehr Ressourcen werden bei der (DE-)Kodierung benötigt. Ein JWT wird üblicherweise in den Kopfzeilen von HTTP-Requests übertragen. Darum gilt: Je größer das Token, desto größer wird auch der eigentliche Request. Es wird deshalb empfohlen, die im JWT enthaltenen Informationen auf das Nötigste zu begrenzen.

Signatur

Den Abschluss bildet die Signatur. Erstellt wird diese durch Kombination des kodierten Headers, der kodierten Payload, eines geheimen Schlüssels und der im Header vorgegebenen Signatur- beziehungsweise Verschlüsselungsmethode. Durch das Signieren ist sichergestellt, dass die Nachricht unterwegs nicht verändert wird und das der Absender des JSON Web Tokens derjenige ist, für den er sich ausgibt.

Dabei gibt es unterschiedliche Verfahren, je nach Sensibilität der Daten.

  1. Keine Sicherung: Bei einem geringen Schutzfaktor kann auf eine Signatur verzichtet werden. Das JWT besteht hierbei nur aus Header und Payload und ist nach der Base64-Entschlüsselung im Klartext lesbar. Ob die Nachricht vom richtigen Absender stammt oder ob sie unterwegs verändert wurde, lässt sich in dem Fall nicht verifizieren. Eingesetzt wird dieses Verfahren so gut wie nie. Ohne Signatur bietet ein JWT keinen sicherheitsrelevanten Mehrwert und kann funktional durch andere, einfachere Datenformate ersetzt werden.

  2. Signatur (JWS): Das Schema JSON Web Signature (JWS) kommt dann zum Einsatz, wenn sichergestellt werden soll, dass die Nachricht vom richtigen Absender stammt und unterwegs nicht verändert wurde. Im Normalfall reicht diese Prüfung aus. Auch bei diesem Verfahren kann nach der Base64-Entschlüsselung, die Payload im Klartext gelesen werden. Signatur (JWS) gilt als Standard-Verfahren und wird von fast allen Systemen eingesetzt.

  3. Signatur (JWS) und Verschlüsselung (JWE): Zusätzlich zur JSON Web Signature (JWS) kann eine JSON Web Encryption (JWE) eingesetzt werden. Hierbei verschlüsselt die JWE die Inhalte des Payloads, die im Anschluss mit JWS signiert werden. Entschlüsselt werden die Inhalte durch Angabe eines gemeinsamen Kennworts oder eines privaten Schlüssels. Der Payload ist nach der Base64-Entschlüsselung nicht im Klartext lesbar, der Absender ist verifiziert und die Nachricht authentisch und vertraulich. Dieses Verfahren ist eine Randerscheinung und wird nur selten eingesetzt, da die Unterstützung durch Anwendungen sehr begrenzt ist. In der Praxis reicht es in der Regel aus, das Signaturverfahren (JWS, siehe Punkt 2) in Kombination mit gesicherten und geschützten Verbindungen zu verwenden und die im Payload enthaltenen Informationen auf das notwendige Minimum zu beschränken.

Bei jedem der genannten Verfahren sollte zusätzlich SSL (Secure Sockets Layer) verwendet werden, um eine verschlüsselte Verbindung zwischen Client (z. B. einem Webbrowser) und Server herzustellen, um die Daten während der Kommunikation zu schützen.

Funktionsweise eines JSON Web Token

Die Funktionsweise eines JSON Web Tokens lässt sich gut anhand eines Benutzer-Logins erklären:

Meldet sich ein Benutzer mit seiner E-Mail-Adresse und seinem Passwort an, erstellt der Server ein JSON Web Token. Dieser Token wird mit den entsprechenden Informationen kodiert und mit einem geheimen Schlüssel (secret) oder einem privaten Schlüssel (bei asymmetrischer Signatur) signiert, um Missbrauch zu verhindern. Nach der Erstellung des JWT, wird dieses an den Client gesendet und lokal gespeichert.

Bei jeder erneuten Anfrage an den Server, sendet der Client das JWT beispielsweise als Parameter im GET-Request. Der Server entschlüsselt das JWT, prüft die Authentizität des Tokens und die Angaben wie Aussteller, Zielgruppe und Gültigkeitsdauer. Nach erfolgreicher Prüfung erhält der Client Zugriff auf die angefragte Ressource.

Für zusätzliche Sicherheit sorgt eine Ablaufzeit mit der JWTs in der Regel versehen sind. So prüft der Server während der Validierung die Gültigkeitsdauer des Tokens und lehnt eine Bearbeitung ab, wenn es abgelaufen ist. In diesem Fall wird der Client aufgefordert, das Token zu aktualisieren.

Vorteile bei der Verwendung von JSON Web Tokens

Für Anwendungen die Informationen zwischen verschiedenen Systemen austauschen, sind JSON Web Tokens sehr nützlich. Sie ermöglichen den sicheren Austausch sensibler Daten, sind äußerst flexibel, skalierbar und leichtgewichtig. So können sie von mobilen Anwendungen, einfach verwendet werden.

Weitere Vorteile sind:

Nachteile bei der Verwendung von JSON Web Tokens

Wo Licht ist, da ist auch Schatten. Und auch wenn JWTs viele Vorteile bieten, so wollen wir hier auch die Nachteile nennen, die es bei der Verwendung von JSON Web Tokens gibt.

Anwendungsfälle für JSON Web Token

Aufgrund der erhöhten Sicherheit und Flexibilität sind JSON Web Tokens die ideale Wahl für unterschiedliche Authentifizierungsverfahren. Sie werden hauptsächlich für die zustandslose Authentifizierung, Autorisierung und Sitzungsverwaltung in modernen Anwendungen genutzt. JWTs ermöglichen sowohl serverseitigen als auch clientseitigen Anwendungen, Benutzer sicher zu authentifizieren und wichtige Informationen auszutauschen, ohne dass für jede Anfrage eine Datenbankabfrage erfolgen muss. Nachfolgend einige der häufigsten Anwendungsfälle für JSON Web Tokens:

Fazit

Ein JSON Web Token (JWT) ist ein mächtiges Werkzeug und somit ideal für Authentifizierung und Datenaustausch. Server müssen keinen Sitzungsstatus speichern, da JWTs alle notwendigen Informationen enthalten. Sie sind flexibel, skalierbar, kompakt und leicht übertragbar.

Aber JWTs sind nicht per se verschlüsselt. Sensible Daten müssen deshalb zusätzlich durch JSON Web Encryption (JWE) verschlüsselt werden. Auch sollte die Gültigkeitsdauer mit Bedacht gewählt werden, wobei kurze Zeiten empfohlen werden.

So bilden JSON Web Tokens zusammen mit OpenID Connect (OIDC) und OAuth 2.0, eine gute, moderne Basis für die sichere Authentifizierung und Autorisierung.