Vollständiger JWT-Sicherheitsleitfaden: Dekodierung, Verifikation und Häufige Schwachstellen

Dienstprogramme

Was ist JWT?

JWT (JSON Web Token) ist ein offener Standard (RFC 7519) zur sicheren Übermittlung von Informationen zwischen Parteien. Es ist das beliebteste API-Authentifizierungsschema, weit verbreitet bei OAuth 2.0 und OpenID Connect.

JWT-Struktur

Ein JWT besteht aus drei durch . getrennten Teilen:

eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiIxMjM0NTY3ODkwIn0.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
│        Header        │.│         Payload        │.│        Signature        │
Teil Inhalt Kodierung
Header Algorithmus + Typ Base64URL
Payload Claims Base64URL
Signature Signatur Algorithmus(Header + Payload, Geheimnis)

⚠️ Header und Payload sind nur Base64URL-kodiert—sie sind nicht verschlüsselt. Jeder kann sie dekodieren und lesen.


JWT mit ToolsKu dekodieren

Schritte

  1. Öffnen Sie den JWT-Decoder
  2. Fügen Sie die JWT-Zeichenkette ein
  3. Sehen Sie sich das dekodierte Header- und Payload-JSON an
  4. Prüfen Sie Ablaufzeit, Aussteller und andere Felder

Häufige Payload-Felder

Feld Bedeutung Beispiel
sub Subjekt (Benutzer-ID) "user_12345"
iss Aussteller "https://auth.example.com"
aud Zielgruppe "api.example.com"
exp Ablauf (Unix-Sekunden) 1717200000
iat Ausgestellt am 1717196400
nbf Nicht vor 1717196400
jti JWT-ID (eindeutige Kennung) "a1b2c3d4"

JWT-Signaturalgorithmen

Algorithmus Typ Sicherheit Anwendungsfall
HS256 Symmetrisch Mittel Einzeldienst, interne APIs
HS384/HS512 Symmetrisch Mittel–hoch Höhere Sicherheitsanforderungen
RS256 Asymmetrisch Hoch Mehrdienst, OAuth
ES256 Asymmetrisch Hoch Mobile, IoT
none Keine Signatur ❌ Gefährlich Niemals verwenden

Symmetrisch vs Asymmetrisch

HS256 (symmetrisch):
  Signieren: HMAC-SHA256(header.payload, shared_secret)
  Verifizieren: Gleiches shared_secret
  Problem: Alle Dienste teilen ein Geheimnis—ein Leck betrifft alles

RS256 (asymmetrisch):
  Signieren: RSA-SHA256(header.payload, private_key)
  Verifizieren: RSA-SHA256(header.payload, public_key)
  Vorteil: Öffentlicher Schlüssel kann verteilt werden; privater Schlüssel bleibt beim Aussteller

Häufige Sicherheitslücken

1. alg: none-Angriff

Ein Angreifer ändert den Header-alg auf none und entfernt die Signatur:

// Original-Header
{"alg": "HS256", "typ": "JWT"}

// Angreifer-Modifikation
{"alg": "none", "typ": "JWT"}

Verteidigung: Der Server muss zulässige Algorithmen auf die Whitelist setzen und none ablehnen.

2. Key-Confusion-Angriff

RS256 auf HS256 umstellen und den öffentlichen Schlüssel als HMAC-Geheimnis verwenden:

Angreifer erhält öffentlichen Schlüssel → ändert alg zu HS256 → signiert mit öffentlichem Schlüssel → Server verifiziert HMAC mit öffentlichem Schlüssel → erfolgreich

Verteidigung: Streng validieren, dass der Header-alg den Erwartungen entspricht.

3. Vertrauliche Datenleckage

Da der Payload nur Base64-kodiert ist, niemals in JWT speichern:

  • ❌ Passwörter, Kreditkartennummern
  • ❌ Persönliche Privatinformationen
  • ✅ Benutzer-ID, Rollen, Berechtigungen

4. Ungeeignete Ablaufzeit

// ❌ Keine Ablaufzeit — Token gilt für immer
{"sub": "user_123"}

// ❌ Ablaufzeit zu lang — geleaktes Token bleibt gültig
{"sub": "user_123", "exp": 1893456000}  // Jahr 2030

// ✅ Angemessene Ablaufzeit + Refresh-Flow
{"sub": "user_123", "exp": 1717200000}   // 15–60 Minuten

JWT-Best Practices

1. Kurzlebiges Access Token + Refresh Token

Access Token:  15–60 Minuten Gültigkeit, für API-Aufrufe
Refresh Token: 7–30 Tage Gültigkeit, um neue Access Tokens zu erhalten

2. Speicherort

Speicher XSS-Risiko CSRF-Risiko Empfohlen
localStorage Hoch Niedrig
sessionStorage Hoch Niedrig
HttpOnly-Cookie Niedrig Hoch ⚠️ Benötigt CSRF-Schutz
In-Memory-Variable Niedrig Niedrig ✅ Empfohlen für SPAs

3. Verifikations-Checkliste

Bei der JWT-Validierung auf dem Server immer prüfen:

  • Signatur ist gültig
  • exp ist nicht abgelaufen
  • nbf ist in Kraft
  • iss ist der erwartete Aussteller
  • aud enthält den aktuellen Dienst
  • alg steht auf der Whitelist

JWT-Probleme debuggen

  1. JWT dekodieren: Verwenden Sie den JWT-Decoder, um Header und Payload zu inspizieren
  2. exp prüfen: Ist das Token abgelaufen?
  3. alg prüfen: Entspricht der Signaturalgorithmus den Erwartungen?
  4. iss/aud prüfen: Sind Aussteller und Zielgruppe korrekt?
  5. Signatur verifizieren: Verwenden Sie den JWT-Generator, um mit demselben Geheimnis neu zu signieren und zu vergleichen
  6. Transport prüfen: Ist der Authorization-Header Bearer <token>?

Verwandte Tools


Zusammenfassung

JWT ist ein Eckpfeiler der modernen API-Authentifizierung, aber Base64-Kodierung (keine Verschlüsselung) schafft einzigartige Sicherheitsprobleme. Struktur, Signierung und häufige Schwachstellen zu verstehen, ist für Full-Stack-Entwickler unerlässlich. ToolsKus JWT-Decoder hilft Ihnen, Authentifizierung schnell zu debuggen—aber denken Sie daran: Dekodieren ist keine Verifikation; validieren Sie Signaturen auf dem Server immer in der Produktion.

#JWT#认证#安全#OAuth#API