Skip to content
IRC-Coding IRC-Coding
JWT JSON Web Token Token Sicherheit API Authentifizierung Claims Signatur

JWT Token: Struktur, Sicherheit und richtige Verwendung in APIs

Lerne JWT Token: Aufbau aus Header, Payload und Signatur, Signaturen, Claims, Sicherheitsrisiken und Best Practices für den Einsatz in APIs.

S

schutzgeist

2 min read
JWT Token: Struktur, Sicherheit und richtige Verwendung in APIs

JWT Token: Struktur und Sicherheit

JWTs sind kompakte, selbstbeschreibende Token, die Identität und Berechtigungen transportieren, aber nur dann sicher sind, wenn sie korrekt signiert und validiert werden.

Kompakte Beschreibung

JWT steht für JSON Web Token und ist ein weit verbreitetes Format für die Übertragung von Claims zwischen zwei Parteien. Ein JWT besteht aus drei Teilen: Header, Payload und Signatur, die durch Punkte getrennt und Base64Url-kodiert sind. Der Header enthält Metadaten wie Algorithmus und Token-Typ, der Payload enthält Claims wie Ablaufzeit, Aussteller und Nutzer-ID, und die Signatur sichert die Integrität und Authentizität. JWTs werden häufig für API-Authentifizierung und Authorization verwendet, bergen aber Sicherheitsrisiken, wenn sie falsch eingesetzt werden. Wichtige Regeln sind: kurze Gültigkeit, starke Algorithmen, korrekte Validierung von Aussteller und Audience, Verwendung von HTTPS und niemals sensible Daten im Payload speichern, da dieser lediglich kodiert, nicht verschlüsselt ist.

Wichtige Komponenten

Der Header enthält typischerweise zwei Claims: alg für den verwendeten Algorithmus und typ für den Token-Typ. Er ist Base64Url-kodiert. Der Algorithmus sollte ein asymmetrisches Verfahren wie RS256 oder ein starkes symmetrisches Verfahren wie HS256 mit einem langen Geheimnis sein. Algorithmus none darf niemals akzeptiert werden.

Payload

Der Payload enthält die Claims. Standard-Claims sind sub für Subject, iss für Issuer, aud für Audience, exp für Ablaufzeit, iat für Ausstellungszeit, nbf für Not Before und jti für JWT ID. Anwendungsspezifische Claims wie rollen oder berechtigungen können hinzugefügt werden. Der Payload ist ebenfalls Base64Url-kodiert und für jeden lesbar, der das Token besitzt.

Signatur

Die Signatur entsteht, indem Header und Payload zusammengefasst und mit dem gewählten Algorithmus und dem Schlüssel signiert werden. Sie stellt sicher, dass das Token nicht verändert wurde. Der Empfänger prüft die Signatur mit dem öffentlichen oder symmetrischen Schlüssel des Ausstellers.

Base64Url-Kodierung

Base64Url ist eine URL-sichere Variante der Base64-Kodierung. Sie ersetzt Plus und Schrägstrich durch andere Zeichen und entfernt Padding. Sie ermöglicht die kompakte Darstellung von JSON-Daten in Tokens, die in URLs und Headern übertragen werden können.

Signaturen Algorithmen

RS256 nutzt RSA mit SHA-256 und ein Schlüsselpaar aus privatem und öffentlichem Schlüssel. Der Aussteller signiert mit dem privaten Schlüssel, der Empfänger prüft mit dem öffentlichen Schlüssel. HS256 nutzt ein gemeinsames Geheimnis. Asymmetrische Verfahren sind für verteilte Systeme besser geeignet.

Claims und Ablaufzeit

Claims sind die zentralen Daten im JWT. exp definiert die Ablaufzeit und ist besonders wichtig, um die Lebensdauer eines Tokens zu begrenzen. Kurze Gültigkeit reduziert das Risiko, wenn ein Token gestohlen wird. iat und nbf helfen, die Gültigkeitsperiode weiter einzuschränken.

Token-Validierung

Ein Resource Server muss beim Empfang eines JWT mindestens folgendes prüfen: Signatur, Ablaufzeit, Aussteller, Audience, Algorithmus und notwendige Claims. Fehlende oder falsche Prüfungen können zu unbefugtem Zugriff führen.

Token-Transport

JWTs werden meist im Authorization Header als Bearer Token übertragen. Der Header sieht beispielsweise so aus: Authorization: Bearer eyJhbGciOiJIUzI1NiIs… . Die Übertragung muss immer über HTTPS erfolgen, um Token-Diebstahl zu vermeiden.

Sicherheitsrisiken

Bekannte Risiken sind Algorithmus-Confusion, wo Angreifer den Algorithmus auf none ändern, schwache Schlüssel bei HS256, lange Gültigkeit, fehlende Audience-Prüfung und das Speichern sensibler Daten im Payload. Zusätzlich können gestohlene Tokens genutzt werden, solange sie gültig sind, daher ist kurze Lebensdauer wichtig.

JWK und JWKS

JWK steht für JSON Web Key, JWKS für JSON Web Key Set. JWKS ist eine Sammlung von öffentlichen Schlüsseln, die ein Resource Server nutzt, um JWTs zu validieren. Der Authorization Server veröffentlicht JWKS meist unter einer bekannten URL, sodass sich Schlüssel automatisch austauschen lassen.

Praxisbeispiel

Ein API-Client erhält nach erfolgreicher Anmeldung ein JWT Access Token. Der Token besteht aus drei Teilen, die Base64Url-kodiert sind.

Dekodierter Header:

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

Dekodierter Payload:

{
  "sub": "user-98765",
  "iss": "https://auth.example.com",
  "aud": "https://api.example.com",
  "exp": 1751300000,
  "iat": 1751296400,
  "scope": "read:orders write:orders"
}

Der vollständige Token wird im Authorization Header übertragen:

GET /api/v1/orders
Authorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9...

Der Resource Server prüft die Signatur mit dem öffentlichen Schlüssel, validiert exp, iss, aud und scope und erlaubt dann den Zugriff. Ist das Token abgelaufen oder die Signatur ungültig, antwortet der Server mit 401 Unauthorized.

FAQ: JWT Token

1. Was ist ein JWT?

JWT steht für JSON Web Token. Es ist ein kompaktes Tokenformat, das aus Header, Payload und Signatur besteht und Claims zur Authentifizierung und Authorization transportiert.

2. Wie ist ein JWT aufgebaut?

Ein JWT besteht aus Header, Payload und Signatur, die durch Punkte getrennt sind. Alle drei Teile sind Base64Url-kodiert.

3. Was sind Claims?

Claims sind die im Payload enthaltenen Informationen. Wichtige Standard-Claims sind sub, iss, aud, exp, iat und nbf. Anwendungsspezifische Claims können zusätzlich definiert werden.

4. Ist der Payload eines JWT verschlüsselt?

Nein, der Payload ist nur Base64Url-kodiert und damit für jeden lesbar, der das Token besitzt. JWTs sollten keine sensiblen Daten enthalten, es sei denn, sie werden als JWE verschlüsselt.

5. Was ist die Signatur eines JWT?

Die Signatur sichert Header und Payload mit einem kryptografischen Algorithmus und einem Schlüssel. Sie stellt sicher, dass das Token seit der Ausstellung nicht verändert wurde.

6. Was ist der Unterschied zwischen RS256 und HS256?

RS256 ist ein asymmetrisches Verfahren mit privatem und öffentlichem Schlüssel. HS256 ist ein symmetrisches Verfahren mit einem gemeinsamen Geheimnis. RS256 ist für verteilte APIs besser geeignet.

7. Was bedeutet Algorithmus none?

Algorithmus none bedeutet, dass das Token nicht signiert ist. Server dürfen solche Tokens niemals akzeptieren, weil sie leicht manipuliert werden können.

8. Was ist Algorithmus-Confusion?

Algorithmus-Confusion ist ein Angriff, bei dem ein Angreifer den Algorithmus im Header ändert und den öffentlichen Schlüssel als symmetrisches Geheimnis verwendet, um ein gefälschtes Token zu signieren. Server sollten den Algorithmus streng validieren.

9. Was ist JWKS?

JWKS steht für JSON Web Key Set. Es ist eine Sammlung von öffentlichen Schlüsseln, die ein Resource Server nutzt, um JWTs zu validieren. Schlüssel können über eine URL automatisch bezogen werden.

10. Warum sollte ein JWT kurzlebig sein?

Kurze Gültigkeit reduziert das Risiko, wenn ein Token gestohlen wird. Ein Angreifer kann ein gestohlenes Token nur so lange nutzen, wie es gültig ist. Danach benötigt er einen neuen Token.

11. Was ist ein Bearer Token?

Ein Bearer Token ist ein Token, das im Authorization Header mit Bearer übertragen wird. Wer das Token besitzt, gilt als berechtigt. Bearer Tokens müssen daher geschützt werden.

12. Wie validiert man ein JWT?

Ein JWT wird auf Signatur, Ablaufzeit, Aussteller, Audience, Algorithmus und erforderliche Claims geprüft. Die Validierung muss serverseitig erfolgen und alle Standardprüfungen enthalten.

13. Was ist ein Refresh Token?

Ein Refresh Token ist ein langlebiges Token, mit dem ein Client ein neues JWT Access Token anfordern kann. Refresh Tokens müssen besonders geschützt und widerrufbar sein.

14. Sollte man JWTs im Browser speichern?

Access Tokens im Browser sollten kurzlebig sein und nicht im lokalen Speicher für lange Zeit abgelegt werden. Besser geeignet sind sichere, httpOnly Cookies oder speicherbare Token mit sehr kurzer Lebensdauer.

15. Was sind typische JWT Sicherheitsfehler?

Typische Fehler sind Akzeptanz von Algorithmus none, schwache Schlüssel, lange Gültigkeit, fehlende Audience- und Issuer-Prüfung, Speicherung sensibler Daten im Payload und unverschlüsselte Übertragung.

Quellen

  1. https://datatracker.ietf.org/doc/html/rfc7519
  2. https://datatracker.ietf.org/doc/html/rfc7517
  3. https://datatracker.ietf.org/doc/html/rfc7518

Buchempfehlungen zur API-Sicherheit

Wenn Du Dich weiter mit JWT, Token-Sicherheit und API-Sicherheit beschäftigen möchtest, empfehlen wir Dir die folgenden Bücher:

Keine Bücher für Kategorie "security" gefunden.

Zurück zum Blog
Share:

Ähnliche Beiträge