Was ist JWT?

Artikel

JWT steht für JSON Web Token. Es ist ein kompaktes, URL-sicheres Token-Format, das verwendet wird, um Informationen zwischen Parteien sicher als JSON-Objekt zu übertragen. Die Informationen werden digital signiert, sodass sie verifiziert und als vertrauenswürdig eingestuft werden können. JWTs werden am häufigsten für Authentifizierung und Autorisierung in Web- und Mobile-Anwendungen eingesetzt.

Möchtest du ein JWT-Token prüfen oder dekodieren?

JWT Decoder öffnen →

Geschichte

JWT wurde von der IETF (Internet Engineering Task Force) vorgeschlagen und im Mai 2015 als RFC 7519 standardisiert. Es wurde als Teil des umfassenderen JSON Object Signing and Encryption (JOSE)-Frameworks entwickelt. JWT wurde schnell zum dominierenden Token-Format für REST-APIs und Single-Page-Anwendungen und ersetzte in vielen Web-Kontexten schwerere XML-basierte Alternativen wie SAML-Tokens.

Struktur

Ein JWT besteht aus drei Base64URL-kodierten Teilen, die durch Punkte getrennt sind: header.payload.signature.

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9
.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkFsaWNlIiwiaWF0IjoxNTE2MjM5MDIyfQ
.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c

1. Header

Der Header gibt den Token-Typ und den verwendeten Signierungsalgorithmus an:

{
  "alg": "HS256",
  "typ": "JWT"
}

2. Payload

Der Payload enthält Claims — Aussagen über den Benutzer und zusätzliche Metadaten. Standardmäßige Claims sind:

{
  "sub": "1234567890",
  "name": "Alice",
  "role": "admin",
  "iat": 1516239022,
  "exp": 1516242622
}

3. Signatur

Die Signatur wird erstellt, indem der kodierte Header und Payload mit einem geheimen Schlüssel (oder einem privaten Schlüssel bei asymmetrischen Algorithmen) signiert werden. Sie stellt sicher, dass das Token nicht manipuliert wurde:

HMACSHA256(
  base64UrlEncode(header) + "." + base64UrlEncode(payload),
  secret
)

Wie JWT-Authentifizierung funktioniert

  1. Benutzer meldet sich mit Anmeldedaten an (Benutzername + Passwort)
  2. Server prüft die Anmeldedaten und erstellt ein signiertes JWT
  3. Server gibt das JWT an den Client zurück
  4. Client speichert das JWT (üblicherweise im Arbeitsspeicher oder in localStorage)
  5. Client sendet das JWT im Header Authorization: Bearer <token> bei jeder Anfrage
  6. Server verifiziert die Signatur und liest die Claims ohne Datenbankabfrage

Signierungsalgorithmen

Häufige Anwendungsfälle

Sicherheitsregeln

Häufig gestellte Fragen

Was ist JWT?

JWT (JSON Web Token) ist ein kompaktes, URL-sicheres Token-Format, das verwendet wird, um Informationen zwischen Parteien sicher als JSON-Objekt zu übertragen. Die Informationen sind digital signiert und können daher verifiziert und als vertrauenswürdig eingestuft werden. JWTs werden am häufigsten für Authentifizierung und Autorisierung in Webanwendungen genutzt.

Wofür steht JWT?

JWT steht für JSON Web Token. Es handelt sich um einen offenen Standard (RFC 7519), der eine kompakte und in sich geschlossene Methode zur Übertragung von Informationen zwischen Parteien als JSON-Objekt definiert.

Wofür wird JWT verwendet?

JWT wird am häufigsten für Authentifizierung (Benutzer nach dem Login eingeloggt halten) und Autorisierung (Ressourcenzugriff steuern) eingesetzt. Es wird auch für den Informationsaustausch zwischen Microservices verwendet.

Ist JWT sicher?

Der Payload ist nur Base64-kodiert, nicht verschlüsselt — jeder, der das Token besitzt, kann seinen Inhalt lesen. Die Signatur verhindert Manipulation, bietet aber keine Vertraulichkeit. Speichere niemals sensible Daten in einem JWT-Payload und verwende immer HTTPS.

Was ist der Unterschied zwischen JWT und Session-Cookies?

Session-Cookies speichern nur eine Session-ID; der Server fragt eine Datenbank ab, um die Session zu finden. JWTs sind in sich geschlossen — alle Benutzerdaten befinden sich im Token, sodass keine Datenbankabfrage erforderlich ist. JWTs skalieren besser für verteilte Systeme, können aber ohne zusätzliche Infrastruktur nicht vor Ablauf invalidiert werden.

Was ist der Unterschied zwischen HS256 und RS256?

HS256 verwendet einen einzigen gemeinsamen geheimen Schlüssel für Signieren und Verifizierung. RS256 verwendet einen privaten Schlüssel zum Signieren und einen öffentlichen Schlüssel zum Verifizieren — sicherer für verteilte Systeme, in denen Verifizierer keine neuen Tokens ausstellen können sollen.

Verwandte Artikel

Quellen