Wer mit APIs oder modernen Webanwendungen arbeitet, stößt früher oder später auf JWTs – oft ohne zu wissen, was sich hinter dem Kürzel verbirgt. Dabei ist das Prinzip erstaunlich simpel: Ein JWT überträgt Informationen als signiertes JSON-Objekt, das kryptographisch signiert ist und sich daher ohne Datenbankabfrage verifizieren lässt. Dieser Artikel erklärt, wie JWT funktioniert, wo es sich von OAuth unterscheidet, und welche Stolperfallen Entwickler kennen sollten.

Offener Standard: RFC 7519 · Payload-Format: JSON · Struktur: Header.Payload.Signature · Top-Quelle: jwt.io

Kurzüberblick

1Bestätigte Fakten
  • JWT entspricht RFC 7519 – dem offenen Standard der IETF (Adobe Experience League)
  • Drei Teile: Header, Payload und Signatur, getrennt durch Punkte (oose.de)
  • Standard-Claims: sub, name, iat, exp, aud (oose.de)
2Was unklar ist
  • Exakte Erfindungsdaten des JWT-Formats
  • Aktuelle Statistiken zu JWT-Schwachstellen-Ausnutzungen (post-2023)
3Zeitleisten-Signal
  • OAuth 2.0 RFC 6749: Oktober 2012
  • JWT RFC 7519: Mai 2015
4Wie es weitergeht
  • JWT bleibt Standard für Microservices und APIS
  • OAuth 2.1 als Nachfolger mit verbesserter Sicherheit diskutiert
Attribut Wert
Standard RFC 7519
Ersteller IETF
Format Base64-kodiert (Header.Payload.Signature)
Hauptzweck Sichere Claims-Übertragung
Veröffentlichung Mai 2015

Was ist ein JWT-Token?

Ein JWT (JSON Web Token) ist ein kompaktes, selbstenthaltendes Format zur sicheren Übertragung von Claims als JSON-Objekt mit kryptographischer Signatur. Der offizielle Standard RFC 7519 stammt von der IETF und wurde im Mai 2015 veröffentlicht.

Die Struktur besteht aus drei Teilen, die durch Punkte getrennt und jeweils Base64-kodiert sind:

Fazit: JWT ist ein signiertes JSON-Objekt mit drei Teilen – Header, Payload und Signatur. Der Payload enthält die Claims, die Signatur garantiert die Integrität.

Definition nach RFC 7519

RFC 7519 definiert JWT als kompaktes, URL-sicheres Mittel zur Übertragung von Ansprüchen (Claims) zwischen zwei Parteien. Die Claims sind JSON-Daten, die Informationen über einen Nutzer oder eine Anfrage enthalten.

Struktur: Header, Payload, Signature

Der Header enthält Metadaten wie den verwendeten Algorithmus (z.B. RS256 oder HS256) und den Tokentyp. Der Payload speichert die eigentlichen Claims wie sub (Subject), name, iat (Issued At), exp (Expiration) und aud (Audience). Die Signatur wird mit einem geheimen Schlüssel oder einem privaten Schlüssel erzeugt und ermöglicht die Überprüfung der Datenintegrität.

JWT ist ein in sich geschlossenes, kompaktes Format, um Informationen als JSON-Objekt auszutauschen.oose.de (Technischer Blog)

Was macht ein JWT-Token?

JWT ermöglicht die sichere Übermittlung von Informationen zwischen Client und Server, ohne dass der Empfänger bei jeder Anfrage eine Datenbankabfrage durchführen muss. Der Ressourcenserver validiert die Signatur lokal und extrahiert die Claims direkt aus dem Token.

Warum das mattert

Für Microservices-Architekturen bedeutet das: Ein zentraler Authentifizierungsdienst signiert einmal, und alle nachgelagerten Dienste validieren eigenständig. Das entlastet Datenbanken und verkürzt Antwortzeiten.

Funktion in der Authentifizierung

In der Praxis funktioniert JWT-Authentifizierung so: Nach dem Login erhält der Client ein signiertes Token, das er bei jeder Anfrage im Authorization-Header mitschickt (Bearer-Token). Der Server prüft die Signatur und die Claims – insbesondere exp und aud – bevor er Zugriff gewährt.

Übertragung zwischen Client und Server

Ein typischer Ablauf: Der Client sendet Anmeldedaten an den Server. Dieser generiert ein JWT mit den erforderlichen Claims und signiert es. Bei jeder subsequenten Anfrage sendet der Client das JWT im Header:

Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...

Wichtig: Der Payload ist Base64-kodiert, aber nicht verschlüsselt. Sensible Daten wie Passwörter oder Gesundheitsdaten gehören nicht in ein JWT.

Die Sicherheitslücke

Sobald ein Angreifer ein gültiges JWT abfängt, bleibt es bis zum Ablauf der exp-Zeit nutzbar. Eine Revocation ist ohne zusätzliche Mechanismen (Blacklist, Refresh-Token) nicht möglich.

Was ist der Unterschied zwischen JWT und OAuth?

OAuth 2.0 ist ein Autorisierungs-Framework, das definiert, wie Zugriff erteilt wird – aber kein spezifisches Token-Format vorgibt. JWT hingegen ist ein Datenformat, das Claims transportiert. Die beiden ergänzen sich häufig, sind aber grundverschieden konzipiert.

Aspekt JWT OAuth 2.0
Rolle Token-Format Autorisierungs-Framework
Was es definiert Wie ein Token aussieht Wie Tokens erhalten werden
Standard RFC 7519 RFC 6749
Einsatz API-Authentifizierung, ID-Tokens Zugriff auf Ressourcen eines Drittanbieters
Speicherung Client-seitig Server-seitig oder client-seitig
Revocation Schwierig ohne Blacklist Token-Invalidation möglich
Skalierbarkeit Zustandslos, ideal für Microservices SSO-Implementierung möglich

Die zwei Technologien lassen sich kombinieren: In OAuth-Flows wird oft ein JWT als Access-Token oder ID-Token verwendet. OpenID Connect erweitert beispielsweise OAuth 2.0 und nutzt JWT als ID-Token für Benutzerinformationen – ID-Tokens in OIDC sind immer JWTs.

OAuth 2.0 definiert, wie Tokens erhalten und verwendet werden. JWT definiert, wie ein Token aussieht und wie es Informationen enthält.Logto Blog (Authentifizierungs-Experte)

JWT als Token-Format

JWT spezifiziert ausschließlich die Struktur und das Format eines Tokens. Ein JWT kann eigenständig für einfache API-Authentifizierung verwendet werden, ohne dass ein vollständiger OAuth-Flow implementiert wird.

OAuth als Autorisierungs-Framework

OAuth 2.0 definiert mehrere Flows (Authorization Code, Resource Owner Password Credentials etc.) und bietet scope-basierte Zugriffssteuerung sowie Token-Revocation. Für die Integration von JWT in OAuth-Flows existiert z.B. das JWT for OAuth Client Authorization Grants Feature bei IBM.

Vorteile

  • Zustandsloses Session-Management ohne Server-Speicherung
  • Performance-orientiert: Ressourcenserver validieren lokal
  • Bessere Skalierbarkeit für Microservices
  • JWT kann allein für API-Authentifizierung verwendet werden
  • Kompakte Form für URL-Übertragung geeignet

Nachteile

  • Payload nicht verschlüsselt, nur signiert
  • Revocation ohne Blacklist nicht möglich
  • Algorithmusverwirrung ermöglicht Fälschung
  • Sichere Algorithmus-Konfiguration erforderlich
  • Inkonsistente Validierung über Dienste möglich

Wie generiert und verwendet man ein JWT-Token?

Die Generierung eines JWT erfolgt in mehreren Schritten: Zuerst wird der Header als JSON erstellt und Base64-kodiert. Dann folgt der Payload mit den gewünschten Claims. Abschließend werden beide Teile mit dem Secret oder privaten Schlüssel signiert und mit Punkten verbunden.

Generierungsschritte

  1. Header erstellen: {"alg":"HS256","typ":"JWT"} → Base64URL-kodieren
  2. Payload erstellen mit Claims: {"sub":"123","name":"Max Mustermann","iat":1516239022,"exp":1516242622} → Base64URL-kodieren
  3. Signatur erzeugen mit Secret: HMACSHA256(header + "." + payload, secret)
  4. Teile verbinden: header.payload.signature

Verwendung als Bearer-Token

Nach der Generierung wird das JWT als Bearer-Token im HTTP-Header übermittelt. Der Server extrahiert den Header, validiert die Signatur und prüft die Claims – insbesondere iss, aud, exp und nbf – bevor die Anfrage autorisiert wird.

Was zu beachten ist

JJWT ist eine beliebte Bibliothek für Java-basierte Anwendungen, die JWT-Generierung und -Validierung vereinfacht. Für JavaScript gibt es jsonwebtoken, für Python PyJWT.

Warum empfehlen viele JWT nicht?

Trotz seiner Verbreitung hat JWT mehrere Fallstricke, die immer wieder zu Sicherheitsvorfällen führen. OWASP empfiehlt explizite Algorithmen und Claims-Validierung als Mindeststandard.

Algorithmusverwirrung

Angreifer wechseln bei der JWT-Manipulation von RS256 zu HS256 und nutzen den öffentlichen Schlüssel als geheimes Passwort zur Fälschung. Die Signaturprüfung muss vor der Payload-Extraktion erfolgen.

Häufige Kritikpunkte

  • alg: none: Die Akzeptanz des unsignierten „none”-Algorithmus bricht die gesamte Sicherheit und ermöglicht Tokens ohne gültige Signatur.
  • Fehlende exp-Validierung: Ohne Prüfung des Ablauf-Claims bleiben Tokens nach einer Kompromittierung dauerhaft gültig.
  • Fehlende aud-Validierung: Das Token könnte für einen anderen Dienst bestimmt sein und trotzdem akzeptiert werden.
  • Schwache Secrets: Einfache Passwörter für HS256-Signaturen sind ein verbreiteter Entwicklerfehler.
  • Logging-Probleme: Weitergabe von JWT in URLs oder Logs führt zu unbeabsichtigter Offenlegung.

Alternativen

Für Anwendungen mit Anforderungen an sofortige Revocation oder detaillierte Zugriffskontrolle bieten sich klassische Sessions mit serverseitiger Speicherung oder OAuth mit opaken Tokens an. OAuth 2.1 diskutiert Verbesserungen wie die Abschaffung des Implicit Grant und strengere Redirect-Requirements.

JWT ist kompromittiert, wenn Header oder URLs protokolliert werden.Xygeni (Sicherheitsblog)

Fazit: JWT ist ein leistungsstarkes Token-Format für zustandslose Authentifizierung – aber nur bei korrekter Implementierung sicher. Entwickler müssen explizite Algorithmus-Spezifikation, Signaturprüfung vor Payload-Extraktion und alle Standard-Claims (exp, aud, iss) validieren. Für sicherheitskritische Anwendungen: OAuth mit Revocation-Mechanismen in Betracht ziehen.

Verwandte Beiträge: Ping reduzieren: Tipps für Gaming, Roblox & Valorant · Windows 11 Kompatibilität Prüfen – Ist Ihr PC bereit?

JWT-Tokens eignen sich hervorragend für APIs, wobei der besonders im OAuth-Vergleich ihre stateless Natur klar hervortritt.

Häufig gestellte Fragen

Warum sagen Leute „JWT Token”?

Die Abkürzung JWT steht bereits für JSON Web Token. „JWT Token” ist daher technisch redundant, hat sich aber als umgangssprachliche Bezeichnung etabliert – ähnlich wie „PIN-Nummer”.

Kann JWT ohne OAuth verwendet werden?

Ja, JWT kann eigenständig für einfache API-Authentifizierung verwendet werden. OAuth benötigt hingegen ein Token-Format wie JWT für bestimmte Flows, ist aber nicht zwingend darauf angewiesen.

Was ist ein JWT Secret?

Ein JWT Secret ist der geheime Schlüssel, der bei HS256 (symmetrische Verschlüsselung) zur Signaturerzeugung verwendet wird. Er muss sicher gespeichert und stark genug sein, um Brute-Force-Angriffe zu widerstehen.

Wie dekodiert man ein JWT-Token?

Die drei Base64-kodierten Teile können mit jedem Base64-Decoder getrennt werden. jwt.io bietet ein Online-Tool zur Dekodierung. Wichtig: Die Signatur muss separat überprüft werden – Dekodierung bedeutet keine Validierung.

Was ist ein Bearer JWT-Token?

Ein Bearer-Token ist ein Token, das der Inhaber (Bearer) vorzeigt, um Zugriff zu erhalten. JWT wird häufig als Bearer-Token im Authorization-Header übertragen: Authorization: Bearer <token>

Was ist JWT.io?

jwt.io ist ein Online-Tool von Auth0 zur Analyse, Dekodierung und Generierung von JWTs. Es zeigt Header, Payload und Signatur-Status übersichtlich an und dient Entwicklern als Debugging-Werkzeug.

Wie funktioniert JWT-Authentifizierung?

Bei der JWT-Authentifizierung erhält der Client nach erfolgreicher Anmeldung ein signiertes Token. Bei jeder Anfrage wird dieses Token im Header mitgesendet. Der Server validiert die Signatur und prüft die Claims. Stimmen Signatur und Ablaufzeit, ist der Zugriff autorisiert.