Skip to main content
Zum Hauptinhalt springen
Entwicklung28. Februar 2026 15 Min. Lesezeit

JWT-Debugging: Häufige Probleme und Lösungen

Die meisten JWT-Fehler sind sichtbar, sobald Sie die Claims dekodieren. Dieser Leitfaden deckt Struktur, Standardprüfungen, Algorithmus-Fallstricke und einen sicheren lokalen Debugging-Ablauf ab.

Dekodieren Sie JWTs lokal mit dem JWT-Dekoder – Header- und Payload-Claims im Browser, nichts wird hochgeladen.

Warum JWTs brechen und wo Sie suchen

JWT-basierte Authentifizierung scheitert auf eine Handvoll wiederkehrender Arten: abgelaufene Tokens, Uhr-Drift, falscher Issuer oder Audience, Algorithmus-Verwirrung und Signaturprüfungsfehler.

Fast alle hinterlassen eine lesbare Spur. Ein JWT ist nicht undurchsichtig – Header und Payload sind Base64URL-kodiertes JSON, das jede Person dekodieren kann. Die Claims sagen, was das Token behauptet; der Fehler Ihres Servers sagt, was es abgelehnt hat.

Dieser Leitfaden führt vom Token selbst zur Bibliothekskonfiguration und zeigt, wie Sie dabei verhindern, dass das Token an eine beliebige Website leakt.

JWT-Anatomie: drei Segmente, eine Signatur

Ein JWT besteht aus drei durch Punkte getrennten Segmenten: header.payload.signature.

Der Header deklariert Algorithmus (alg) und Token-Typ (typ). Die Payload enthält Claims – Aussagen über das Subject und das Token selbst. Beide sind schlichtes JSON, Base64URL-kodiert und für jede Person lesbar.

Die Signatur wird mit dem Algorithmus aus dem Header und einem vom Issuer gehaltenen Schlüssel erzeugt. Sie erlaubt einem Prüfer, zu bestätigen, dass das Token nicht verändert und vom erwarteten Herausgeber signiert wurde.

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.
eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.
SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
# header = {"alg":"HS256","typ":"JWT"}
# payload = {"sub":"1234567890","name":"John Doe","iat":1516239022}
# signature = HMAC-SHA256(header.payload, secret)

Die Standard-Claims und ihre Bedeutung

ClaimBedeutungWann er zählt
expAblaufzeit (Unix-Sekunden)401 „Token abgelaufen“ – der häufigste Fehler
iatAusstellungszeitVergleich mit Server-Uhr; Frische
nbfNicht gültig vor diesem ZeitpunktTokens, die direkt nach Ausstellung abgelehnt werden
issIssuer-KennungFalscher Issuer – Token von falscher Autorität
audBeabsichtigte AudienceToken für einen anderen Dienst ausgestellt
subSubject-KennungWelche Nutzerin das Token repräsentiert
jtiEindeutige Token-IDReplay-Erkennung und Sperrlisten

Ein sicherer Debugging-Ablauf

  1. Kopieren Sie das vollständige JWT aus Log, Header oder fehlgeschlagener Anfrage – beide Punkte eingeschlossen.
  2. Dekodieren Sie es lokal mit dem JWT-Dekoder – fügen Sie Produktions-Tokens niemals in ein ungeprüftes Online-Werkzeug ein.
  3. Lesen Sie die Payload-Claims: exp, iat, nbf, iss, aud, sub.
  4. Rechnen Sie exp in eine lesbare Zeit um und vergleichen Sie mit der aktuellen Serverzeit, nicht mit Ihrer Laptop-Zeit.
  5. Prüfen Sie iss und aud gegen das, was Ihre API zu akzeptieren konfiguriert ist.
  6. Sehen die Claims korrekt aus, liegt der Fehler in der Verifikation: Algorithmus, Schlüssel oder Uhrzeitbehandlung in der Bibliothek.
  7. Redigieren Sie das Token, bevor Sie Logs mit anderen teilen – auch intern.

Häufige Fehlermuster und Lösungen

Abgelaufenes Token

Das exp des Tokens liegt in der Vergangenheit. Der Client muss sich neu anmelden oder das Token erneuern. Verfallen Tokens zu schnell, sehen Nutzerinnen ständige Logins – prüfen Sie die Lebensdauer-Einstellung des Issuers.

Uhr-Drift

Ein Token, das kurz nach Ausstellung als abgelaufen oder noch nicht gültig abgelehnt wird, bedeutet meist, dass Server- und Issuer-Uhren abweichen. Beheben Sie NTP auf Servern und nutzen Sie eine kleine Toleranz (30–60 Sekunden) nur, wo das Protokoll sie verlangt.

Falscher Issuer oder Audience

Dekodierte Claims sagen ein iss/aud, Ihr Prüfer erwartet ein anderes. Häufig nach Umzügen zwischen Umgebungen (dev vs. prod) oder beim Teilen von Tokens zwischen Diensten. Gleichen Sie die Konfiguration auf beiden Seiten an.

Signaturprüfung fehlgeschlagen

Die Signatur passt nicht. Ursachen: falscher Schlüssel, Schlüsselrotation unterwegs, falscher Algorithmus oder ein unterwegs verändertes Token. Prüfen Sie, dass der Verifizierer den aktuellen öffentlichen Schlüssel des Issuers verwendet.

Algorithmus-Verwirrung (alg-Header)

Vertraut Ihr Prüfer dem alg-Header, kann ein Angreifer RS256 auf HS256 umstellen und mit dem öffentlichen Schlüssel signieren. Prüfer müssen den erwarteten Algorithmus fixieren und „none“ ablehnen. Bibliotheken mit automatischer Auswahl sind eine bekannte Schwachstellenklasse.

Dekodieren ist nicht Verifizieren

Dekodieren liest die Claims – jedes Werkzeug kann das, kein Schlüssel nötig. Verifizieren beweist, dass das Token authentisch ist: Signatur, exp, nbf, iss, aud und Algorithmus, geprüft vom Server mit dem richtigen Schlüssel.

Debugging beginnt meist mit dem Dekodieren, um das Token zu verstehen, und geht dann zur Verifikation über, um zu verstehen, warum der Server es ablehnte.

Seien Sie vorsichtig mit Dekoder-Diensten, die behaupten, Signaturen zu prüfen: Echte Verifikation erfordert den Signaturschlüssel oder öffentlichen Schlüssel, den ein entfernter Dienst niemals von Ihnen verlangen sollte. Ein clientseitiges Werkzeug ist der sichere Standard.

Debugging-Werkzeuge über den Dekoder hinaus

  • Ein clientseitiger JWT-Dekoder, um Claims ohne Upload zu lesen
  • Der Zeitstempel-Konverter, um exp/iat-Unix-Sekunden in lesbare Daten umzuwandeln
  • Ein Base64/Base64URL-Dekoder zur Prüfung einzelner Segmente
  • Die JWT-Bibliothek Ihrer Sprache mit aktivierter Signaturprüfung und fixiertem Algorithmus
  • Strukturierte Anfrageprotokollierung, die Authorization-Header standardmäßig maskiert

FAQ

Q.Ist es sicher, ein JWT online zu dekodieren?

A.Nur wenn das Werkzeug clientseitig ist und das Token niemals irgendwohin sendet. Der Dekoder dieser Seite läuft vollständig im Browser. Behandeln Sie Produktions-Tokens als sensibel – in vielen Systemen sind sie Inhaber-Anmeldedaten.

Q.Warum läuft mein Token direkt nach der Erstellung ab?

A.Prüfen Sie iat/nbf gegen die Server-Uhr. Liegt nbf in der Zukunft oder ist die Server-Uhr voraus, wirkt ein frisches Token abgelaufen oder noch nicht gültig. Beheben Sie NTP und nutzen Sie Toleranz nur, wo nötig.

Q.Brauche ich das Geheimnis, um ein JWT zu dekodieren?

A.Nein. Header und Payload sind ohne Schlüssel lesbar. Das Geheimnis brauchen Sie nur zur Signaturprüfung, und Sie sollten es niemals mit einem entfernten Dienst teilen.

Q.Warum steht im Header alg: none?

A.Dieser Header bedeutet, das Token ist unsigniert – jede Person kann Claims fälschen. Ihr Server muss none ablehnen. Sehen Sie es, prüfen Sie sofort die Konfiguration Ihrer Bibliothek; Algorithmus-Verwirrung ist eine bekannte JWT-Schwachstelle.

Q.Ein Token ist in unseren Logs gelandet. Ist das ein Problem?

A.Ja, behandeln Sie es als kompromittiert. Tokens können bis zum Ablauf wiederverwendet werden. Redigieren oder rotieren Sie es, hören Sie auf, Authorization-Header zu protokollieren, und ergänzen Sie einen CI-Check, der bei Token-Mustern in Testausgaben fehlschlägt.

Q.exp ist in Sekunden, iat auch – warum schlägt mein Vergleich fehl?

A.Beide sind Unix-Sekunden, aber Vorsicht vor Millisekunden: Multipliziert eine Seite mit 1000 und die andere nicht, weichen die Werte um den Faktor 1000 ab. Prüfen Sie die Rohwerte mit dem Zeitstempel-Konverter, bevor Sie etwas anderes debuggen.

Q.Warum zeigt mein JWT 'malformed' an?

A.Eine 'jwt malformed'-Meldung bedeutet meist, dass das Token nicht aus den erwarteten drei durch Punkte getrennten Segmenten besteht oder ein Segment kein gültiges Base64url ist. Häufige Ursachen: ein kopiertes Token mit abgeschnittenem Payload, Leerzeichen oder Zeilenumbrüche um das Token, ein zusätzlicher Punkt innerhalb eines Claim-Werts oder eine opake Session-ID statt eines echten JWT. Fügen Sie das rohe Token in den JWT-Decoder ein und prüfen Sie jedes Segment; korrigieren Sie die Kodierung an der Quelle, statt das Token manuell zu bearbeiten.

Referenzen

  • RFC 7519 – JSON Web Token (JWT): https://www.rfc-editor.org/rfc/rfc7519
  • RFC 7515 – JSON Web Signature (JWS): https://www.rfc-editor.org/rfc/rfc7515
  • RFC 7517 – JSON Web Key (JWK): https://www.rfc-editor.org/rfc/rfc7517
  • OWASP JWT Cheat Sheet: https://cheatsheetseries.owasp.org/cheatsheets/JSON_Web_Token_for_Java_Cheat_Sheet.html

JWTs sicher dekodieren

Header- und Payload-Claims lokal im Browser lesen. Kein Upload, kein Konto.

Claims lesen, dann die Konfiguration beheben

JWT-Debugging ist meist Claim-Lesen: exp, iat, nbf, iss und aud erklären die überwiegende Mehrheit der 401er. Signaturprobleme sind Konfiguration – Algorithmus-Fixierung und Schlüsselverwaltung.

Dekodieren Sie Tokens lokal mit dem JWT-Dekoder, rechnen Sie Zeitstempel mit dem Zeitstempel-Konverter um und halten Sie Tokens aus Logs und Drittanbieter-Seiten heraus.

JWTJWT-DebuggingJWT-DekoderToken-DebuggingJWT-ClaimsJWT-SignaturJWT-AuthentifizierungsfehlerJWT-Token dekodieren