Vollständiger JWT-Sicherheitsleitfaden: Dekodierung, Verifikation und Häufige Schwachstellen
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
- Öffnen Sie den JWT-Decoder
- Fügen Sie die JWT-Zeichenkette ein
- Sehen Sie sich das dekodierte Header- und Payload-JSON an
- 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
-
expist nicht abgelaufen -
nbfist in Kraft -
issist der erwartete Aussteller -
audenthält den aktuellen Dienst -
algsteht auf der Whitelist
JWT-Probleme debuggen
- JWT dekodieren: Verwenden Sie den JWT-Decoder, um Header und Payload zu inspizieren
- exp prüfen: Ist das Token abgelaufen?
- alg prüfen: Entspricht der Signaturalgorithmus den Erwartungen?
- iss/aud prüfen: Sind Aussteller und Zielgruppe korrekt?
- Signatur verifizieren: Verwenden Sie den JWT-Generator, um mit demselben Geheimnis neu zu signieren und zu vergleichen
- Transport prüfen: Ist der Authorization-Header
Bearer <token>?
Verwandte Tools
- JWT-Decoder — Header und Payload analysieren
- JWT-Generator — Benutzerdefinierte JWTs für Tests erstellen
- HMAC-Rechner — HMAC-Signierung verstehen
- Base64-Kodierung/Dekodierung — Von JWT verwendete Kodierung
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.