Skip to main content
Cybersicherheit26. Juli 20269 min read

Was ist ein JWT-Token? Ansprüche, Signaturalgorithmen und Sicherheitsbest Practices

Rudra Chauhan, Senior Systems Architect

Was ist ein JWT-Token? Ansprüche, Signaturalgorithmen und Sicherheitsbest Practices

Was ist ein JWT-Token? Ansprüche, Signaturalgorithmen und Sicherheitsbest Practices

JSON Web Tokens (JWT) gemäß RFC 7519 sind eine offene, branchenstandardisierte Methode zur sicheren Darstellung von Ansprüchen zwischen zwei Parteien. JWTs werden weit verbreitet für stateless Authentifizierung in REST-APIs, Microservices und Single-Page-Anwendungen (SPAs) verwendet.

Allerdings kann eine fehlerhafte Implementierung der JWT-Verifizierung kritische Authentifizierungsbypass-Vulnerabilitäten einleiten.

Anatomie eines JWT-Tokens

Ein JWT-String besteht aus drei base64url-codierten Teilen, die durch Punkte (.) getrennt sind:

HEADER . PAYLOAD . SIGNATURE

Beispiel:

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c

1. Header

Enthält den Token-Typ und den Signaturalgorithmus:

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

2. Payload (Ansprüche)

Enthält Aussagen über eine Entität (typischerweise den Benutzer) und zusätzliche Metadaten:

  • sub (Berechtigter): Benutzer-ID
  • iat (Ausgestellt am): Timestamp
  • exp (Ablaufdatum): Ablaufzeitstempel
  • iss (Aussteller): Identitätsanbieter-URL

3. Signatur

Wird durch die Verwendung der kodierten Header, der kodierten Payload, eines geheimen Schlüssels und der Signierung mit dem angegebenen Algorithmus erstellt.

JWT-Payload-Struktur

json
{
  "iss": "https://example.com",
  "sub": "1234567890",
  "iat": 1643723900,
  "exp": 1643723900,
  "aud": "https://example.com/api/v1",
  "jti": "1234567890",
  "name": "John Doe",
  "email": "john.doe@example.com",
  "roles": ["admin", "moderator"]
}

JWT-Signatur-Generierung

bash
echo -n '{"alg":"HS256","typ":"JWT"}' | base64
echo -n '{"iss":"https://example.com","sub":"1234567890","iat":1643723900,"exp":1643723900,"aud":"https://example.com/api/v1","jti":"1234567890","name":"John Doe","email":"john.doe@example.com","roles":["admin","moderator"]}' | base64
secret_key="Ihr_Schlüssel_hier"
signature=$(echo -n "$(base64 -d <<< "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9")$(base64 -d <<< "eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ")" | openssl dgst -sha256 -hmac "$secret_key" -binary | base64 -w 0)

2. Symmetrische (HS256) vs. Asymmetrische (RS256) Signierung

MerkmalHMAC SHA-256 (HS256)RSA SHA-256 (RS256)
SchlüsseltypGeteilter geheimer Schlüssel (Symmetrisch)Öffentlicher / Geheimer Schlüsselpaar (Asymmetrisch)
SignierungMit geheimem Schlüssel erfolgtMit geheimem Schlüssel erfolgt
VerifizierungMit geheimem Schlüssel erfolgtMit öffentlichem Schlüssel erfolgt
Beste AnwendungMonolithische Backends, bei denen ein einzelner Server Ausgabe und Verifizierung durchführtMicroservices / Verteilte APIs / OAuth2

3. Häufige JWT-Vulnerabilitäten, die vermieden werden sollten

1. Die "alg: none"-Vulnerabilität

Einige schlecht geschriebene Bibliotheken akzeptieren Token, bei denen alg auf none gesetzt ist, und überspringen die Signaturvalidierung. Stellen Sie immer explizit sicher, dass in der Server-Middleware nur erlaubte Algorithmen akzeptiert werden.

2. Algorithmus-Verwirrung-Angriff (HS256 vs RS256)

Wenn ein Server RS256 (asymmetrisch) erwartet, aber HS256 erhält, kann ein Angreifer das Token mit dem Serverschlüssel als geheimem Schlüssel signieren. Überprüfen Sie den Tokenalgorithmus vor der Signaturauswertung.

3. Fehlende Ablaufdatum (exp)-Überprüfung

Token ohne Ablaufdatum leben ewig. Stellen Sie immer sicher, dass kurze Lebensdauer (z.B. 15 Minuten) für Zugriffstoken und Refresh-Token-Rotation vorgesehen ist.

4. Entwickler-Tools auf Teksolvr

Inspektion und Debugging von Token sicher mit Teksolvr-Tools:

5. Beispielverwendungen

  • Authentifizierung: Verwenden Sie JWT für stateless Authentifizierung in REST-APIs, Microservices und Single-Page-Anwendungen (SPAs).
  • Autorisierung: Verwenden Sie JWT, um Benutzerrollen und Berechtigungen zu speichern, und ermöglichen Sie feinmaschige Zugriffssteuerung.
  • Sitzungsverwaltung: Verwenden Sie JWT, um Benutzersitzungen zu verwalten, und eliminieren Sie die Notwendigkeit von serverseitiger Sitzungsverwaltung.

6. Sicherheitsbest Practices

  • Verwenden Sie HTTPS, um Token-Interception und -Manipulation zu verhindern.
  • Stellen Sie sicher, dass kurze Zugriffstoken und Refresh-Token-Rotation vorgesehen sind.
  • Verwenden Sie einen sicheren Zufallszahlengenerator, um geheime Schlüssel zu generieren.
  • Implementieren Sie Token-Blacklisting, um Token-Wiederverwendung zu verhindern.
  • Rotieren Sie regelmäßig geheime Schlüssel und Refresh-Token.

7. Referenzen

  • RFC 7519: JSON Web Tokens (JWT)
  • RFC 7515: JSON Web Signature (JWS)
  • RFC 7516: JSON Web Encryption (JWE)

8. Bildkredite

  • Diagrammname

    Diagrammname

9. Fehlerbehebungskontrolle

  • Überprüfen Sie die Token-Signatur und -Algorithmus.
  • Überprüfen Sie die Token-Ablaufzeit und -Refresh-Token-Rotation.
  • Stellen Sie sicher, dass ein sicheres Zufallszahlengenerator für die Generierung geheimer Schlüssel verwendet wird.
  • Implementieren Sie Token-Blacklisting, um Token-Wiederverwendung zu verhindern.

10. Häufig gestellte Fragen

  • Q: Was ist ein JWT-Token? A: Ein JWT-Token ist ein JSON-Objekt, das Ansprüche, eine Signatur und einen Header enthält.
  • Q: Was ist der Unterschied zwischen symmetrischer und asymmetrischer Signierung? A: Symmetrische Signierung verwendet einen geteilten geheimen Schlüssel, während asymmetrische Signierung einen öffentlichen / geheimen Schlüsselpaar verwendet.
  • Q: Wie verhindere ich die "alg: none"-Vulnerabilität? A: Stellen Sie immer sicher, dass in der Server-Middleware nur erlaubte Algorithmen akzeptiert werden.

11. Schlussfolgerung

JSON Web Tokens (JWT) sind eine weit verbreitete Methode zur sicheren Darstellung von Ansprüchen zwischen zwei Parteien. Allerdings kann eine fehlerhafte Implementierung der JWT-Verifizierung kritische Authentifizierungsbypass-Vulnerabilitäten einleiten. Durch die Einhaltung von Sicherheitsbest Practices, wie der Verwendung von HTTPS, der Einführung kurzer Zugriffstoken und der Implementierung von Token-Blacklisting, können Sie sicherstellen, dass JWT-Tokens in Ihren Anwendungen sicher und zuverlässig verwendet werden.

War diese Anleitung hilfreich?

Fehlersuche oder Testen dieses Leitfadens?

Teksolvr bietet 97 kostenlose Tools zur DNS-Konfigurationsprüfung, DKIM-Zertifikatvalidierung, Port-Tests, Server-Blacklist-Prüfung und Berechnungen.