JSON Web Token (JWT)

JWTs übertragen signierte Ansprüche, deren Gültigkeit und Empfänger bei jeder Nutzung geprüft werden müssen.

Ein kompakter, URL-sicherer Token-Standard für die signierte Übertragung von Informationen zwischen Parteien – häufig genutzt für API-Authentifizierung.

Fortgeschritten2 Min Lesezeit

Erklärung starten

Auf einen Blick

3 Punkte

  1. Selbstbeschreibend: Enthält relevante Claims im Token selbst
  2. Signiert: Manipulation kann bei korrekter Prüfung erkannt werden
  3. Stateless möglich: Server muss nicht zwingend klassische Sessions speichern

Sofortantwort

JWT einfach erklärt

Signierte Tokens für sichere Authentifizierung und Informationsübertragung.

Kurz gesagt
Selbstbeschreibend: Enthält relevante Claims im Token selbst
Typischer Einsatz
API-Authentifizierung, Single Sign-On (SSO), Microservices
Wichtig zu wissen
Stateless möglich: Server muss nicht zwingend klassische Sessions speichern

JSON Web Token im Überblick

Ein JWT (JSON Web Token) ist ein signierter Token, der Informationen enthält und bei API-Requests zur Authentifizierung oder Autorisierung mitgesendet werden kann. Der Server kann den Token oft prüfen, ohne eine klassische Session-Datenbank abzufragen.

Der Ablauf:

1. Login
   User → [email + password] → Server
   Server → [JWT] → User

2. API-Requests
   User → [Request + JWT im Header] → Server
   Server prüft JWT-Signatur
   Server → [Response] → User

JWT-Struktur:

base64url(header).
base64url(payload).
base64url(signature)

Header.Payload.Signature
TeilInhaltBeispiel
HeaderAlgorithmus, Typ{"alg": "HS256", "typ": "JWT"}
PayloadClaims (Daten){"sub": "user-id", "exp": expiry_timestamp}
SignatureSignaturHMAC-SHA256(header + payload, secret)

Technisch betrachtet

JWT erstellen

Node.js Beispiel:

const jwt = require('jsonwebtoken');

const token = jwt.sign(
  {
    sub: userId,
    role: userRole,
    iat: Math.floor(Date.now() / 1000),
    exp: Math.floor(Date.now() / 1000) + accessTokenLifetime
  },
  process.env.JWT_SECRET,
  { algorithm: 'HS256' }
);

JWT verifizieren

try {
  const decoded = jwt.verify(token, process.env.JWT_SECRET);
  console.log(decoded);
  // { sub: userId, role: userRole, ... }
} catch (err) {
  if (err.name === 'TokenExpiredError') {
    // Token abgelaufen
  } else if (err.name === 'JsonWebTokenError') {
    // Ungültige Signatur
  }
}

Standard Claims

ClaimNameBeschreibung
issIssuerWer hat den Token ausgestellt?
subSubjectFür wen ist der Token? (User ID)
audAudienceFür welchen Service?
expExpirationWann läuft er ab?
iatIssued AtWann wurde er ausgestellt?
nbfNot BeforeAb wann gültig?
jtiJWT IDEindeutige Token-ID

Access + Refresh Token Pattern

Login:
Server → kurzlebiges Access Token + länger geschütztes Refresh Token

API-Request:
Client → Access Token → Server

      Abgelaufen?

Client → Refresh Token → Server
Server → Neuer Access Token → Client

Warum zwei Tokens?

  • Access Token: Kurz, oft verwendet, bei Leak begrenzt Schaden
  • Refresh Token: Lang, selten verwendet, sicher gespeichert

Sicherheits-Best-Practices

Do:

  • TLS für Transportverschlüsselung verwenden
  • starke Schlüssel und sichere Key-Verwaltung nutzen
  • Laufzeiten risikobasiert begrenzen
  • Algorithmus explizit prüfen
  • Audience und Issuer validieren

Don’t:

  • sensible Daten im Payload vermeiden
  • none-Algorithmus oder unerwartete Algorithmen nicht akzeptieren
  • Speicherort im Client gegen XSS/CSRF-Risiken abwägen
  • überlange Laufzeiten vermeiden
  • schwache oder hardcodierte Secrets vermeiden

JWT vs. Session

AspektJWTSession
SpeicherortClientServer
Skalierungoft einfacher stateless möglichbenötigt Session Store oder Replikation
Invalidierungohne Zusatzmechanismen schwierigerzentral oft einfacher
Größegrößer, weil Claims enthalten sein könnenklein, meist nur ID
Microserviceshäufig gut nutzbarabhängig von Session-Architektur

Algorithmen

AlgorithmusTypEmpfehlung
HS256Symmetric (HMAC)passend bei sicher geteilter Secret-Verwaltung
RS256Asymmetric (RSA)häufig bei verteilter Verifikation
ES256Asymmetric (ECDSA)kompaktere Signaturen möglich
nonekeine Signaturin produktiven Auth-Flows nicht akzeptieren

Schritt für Schritt

Ein Token sicher ausstellen und prüfen

Ein JWT ist kein verschlüsselter Datentresor. Sein Wert entsteht durch eine korrekte Signaturprüfung und enge Gültigkeitsregeln.

  1. Identität prüfen

    Prüfung

    Ein vertrauenswürdiger Dienst bestätigt die Identität oder den Servicekontext, bevor ein Token ausgestellt wird.

    identitaet -> berechtigter aussteller
  2. Minimale Claims setzen

    Claims

    Der Token enthält nur nötige Angaben zu Empfänger, Zweck und kurzer Laufzeit – keine vertraulichen Inhalte.

    anspruch + empfaenger + ablaufzeit
  3. Signieren und senden

    Ausgabe

    Eine Signatur verbindet Tokeninhalt und ausstellende Stelle. Der Transport erfolgt ausschließlich über geschützte Verbindungen.

    claims + signatur -> jwt
  4. Bei jeder Anfrage validieren

    Validierung

    Der empfangende Dienst prüft Signatur, Aussteller, Zielgruppe und Ablaufzeit, bevor er eine Aktion zulässt.

    jwt -> signatur + issuer + audience + expiry

Konkretes Beispiel

Ein Dienst ruft eine geschützte API auf

Ein Backend übergibt ein Token an einen internen Service.

Token nur decodieren

Der Service liest Angaben aus dem Token, prüft aber nicht zuverlässig, wer ihn signiert hat oder ob er abgelaufen ist.

Token vollständig validieren

Der Service akzeptiert nur erwartete Signaturen und prüft Zielgruppe, Gültigkeit und erforderliche Berechtigungen vor jeder Aktion.

Ein JWT darf erst nach vollständiger Validierung als Grundlage für eine Zugriffsentscheidung dienen.

Einordnung

Vorteile und Grenzen

Das spricht dafür

  • Kompakte Übertragung: Ein signierter Token kann die nötigen Ansprüche direkt mit einer Anfrage transportieren.
  • Gut für verteilte Dienste: Mehrere Services können Tokens anhand gemeinsamer Vertrauensregeln prüfen.
  • Begrenzte Laufzeit möglich: Kurze Gültigkeiten verkleinern das Risiko bei einem abgegriffenen Token.
  • Standardisierte Struktur: Claims für Aussteller, Zielgruppe und Ablauf sind klar benennbar und überprüfbar.

Das solltest du beachten

  • Payload ist meist lesbar: Vertrauliche Daten gehören nicht in den Tokeninhalt.
  • Widerruf braucht Zusatzmechanismen: Rein zustandslose Tokens lassen sich nicht ohne weitere Architektur sofort zentral zurückziehen.
  • Prüfung darf nicht unvollständig sein: Signatur allein reicht ohne Zielgruppe, Aussteller und Ablaufzeit nicht aus.
  • Lange Laufzeiten erhöhen Risiko: Ein gestohlener gültiger Token kann bis zum Ablauf missbraucht werden.
Vertiefung · für Fortgeschrittene

Vom Anspruch zur verifizierten Anfrage

Ein JWT verbindet Tokeninhalt, ausstellende Identität und Prüfregeln beim empfangenden Dienst.

Wissenskarte

signierter Token für geprüfte Ansprüche

Der Tokeninhalt wird erst vertrauenswürdig, wenn der Empfänger alle vereinbarten Prüfungen gegen die erwartete ausstellende Stelle durchführt. JWT gliedert sich in: Aussteller, Claims, Signaturschlüssel, Ablaufzeit, Empfänger, Validierungsregel.

01Einsatzbereiche

Wann ist JWT sinnvoll?

Geeignet für

  • API-AuthentifizierungUser loggt ein, erhält JWT, sendet es bei jedem Request
  • Single Sign-On (SSO)Ein Login für mehrere Anwendungen
  • MicroservicesService-zu-Service-Authentifizierung ohne zentrale Session
  • Mobile AppsStateless Auth kann für mobile Clients nützlich sein

↑ Inhalt

02Werkzeuge

Womit JWT umgesetzt wird

↑ Inhalt

Merksatz

Ein JWT ist wie ein Konzertticket mit Hologramm

Es enthält deine Infos (Name, Sitzplatz), ist fälschungssicher (Signatur), und der Türsteher kann es prüfen, ohne die Ticketdatenbank zu fragen.

  1. Selbstbeschreibend: Enthält relevante Claims im Token selbst
  2. Signiert: Manipulation kann bei korrekter Prüfung erkannt werden
  3. Stateless möglich: Server muss nicht zwingend klassische Sessions speichern

04Redaktion

Herkunft und Stand

Redaktion und Aktualität

Ebenex RedaktionRedaktion

Veröffentlicht
Aktualisiert

Dieses Feld entwickelt sich schnell. Oben stehen Veröffentlichung und letzte Änderung; ein Prüfdatum kommt dazu, sobald die Erklärung nach ihrer letzten Änderung geprüft wurde.

↑ Inhalt

05FAQ

Häufige Fragen zu JWT

Ist JWT sicher?

JWTs können sicher sein, wenn sie korrekt implementiert werden: starke Schlüssel, passende Laufzeiten, TLS, Algorithmusprüfung und keine sensiblen Daten im Payload. Häufige Fehler sind schwache Secrets, falsche Algorithmusprüfung oder fehlende Expiration.

Was ist der Unterschied zwischen JWT und Session?

Session: Server speichert Zustand, Client hat meist nur eine Session-ID. JWT: Client trägt Claims im Token, und der Server kann stateless prüfen. JWTs können Skalierung vereinfachen, Sessions sind oft leichter zentral zu invalidieren.

Wie lang sollte ein JWT gültig sein?

Die Laufzeit hängt von Risiko, Client-Typ und Architektur ab. Häufig werden kurze Access Tokens mit länger lebenden, stärker geschützten Refresh Tokens kombiniert.

Kann ich JWTs invalidieren?

Bei vollständig stateless JWTs nicht ohne zusätzliche Mechanismen. Optionen sind kurze Laufzeiten, Revocation-Listen, Token-Versionen, Rotation oder introspektionsbasierte Ansätze.

↑ Inhalt

06Weiterlernen

Was möchtest du als Nächstes verstehen?

↑ Inhalt