Menu

JWT-Decoder

JSON Web Tokens Stück für Stück zerlegen und prüfen.

Zuletzt aktualisiert

Algorithmus
KodiertJSON Web Token einfügen
Dekodiert
Header und Payload erscheinen hier — Token verlassen Ihren Browser nie.

Was ist ein JWT Decoder?

Ein JWT Decoder zerlegt einen JSON Web Token in seine drei Teile – Header, Payload und Signature – und Base64URL-dekodiert die ersten beiden, sodass du sie als JSON lesen kannst. Beim Debuggen von Login-Flows, Authorization, Session-Claims oder abgelaufenen Tokens gehört das zum täglichen Werkzeug.

Einen JWT zu dekodieren heißt *nicht*, ihm zu vertrauen. Header und Payload sind absichtlich lesbar – sie sind nur Base64URL-codiert, nicht verschlüsselt. Erst die Verifikation prüft, ob der Token wirklich vom erwarteten Aussteller signiert wurde und unterwegs nicht verändert wurde.

Ein JWT sieht aus wie header.payload.signature. Jeder Teil ist Base64URL-codiert und durch Punkte getrennt. Der Header sagt, welcher Signaturalgorithmus verwendet wurde, der Payload trägt die Claims (wer der Nutzer ist, wann der Token abläuft, was er darf), und die Signature erlaubt dem Server zu prüfen, dass am Token nichts verändert wurde.

Was du beim Dekodieren von JWTs lernst

  • Ein JWT besteht aus drei Base64URL-codierten Teilen, getrennt durch Punkte: header.payload.signature.
  • Übliche Claims wie sub, role, iat, nbf und exp beschreiben Identität, Berechtigungen, Ausstellungszeitpunkt und Ablaufzeit.
  • Den dekodierten Payload kann jeder verändern – nur die Signature lässt den Server eine Manipulation erkennen.

Schritt für Schritt: einen JWT dekodieren

  1. Den vollständigen Token einfügen

    Füge den JWT in das Eingabefeld ein. Er sollte aussehen wie xxxx.yyyy.zzzz – drei Base64URL-codierte Teile, verbunden durch Punkte.

  2. Header lesen

    Der Header verrät dir den Signaturalgorithmus (alg) und den Token-Typ. Achtung bei "alg": "none" – das bedeutet, der Token ist unsigniert und nicht vertrauenswürdig.

  3. Claims im Payload lesen

    Der Payload ist das JSON mit allen Claims. Schau nach sub (User-ID), exp (Ablauf), iat (ausgestellt am) und nach eigenen Claims deiner Anwendung wie role oder tenant.

  4. Ablaufzeit prüfen

    Wandle den Unix-Timestamp aus exp in ein Datum um – liegt es in der Vergangenheit, ist der Token abgelaufen und jede ordentliche API wird ihn ablehnen.

  5. Signature verifizieren (optional)

    Wenn du das Secret oder den Public Key hast, gib es bzw. ihn im Verifier an, um die Signature zu prüfen. Den Inhalten kannst du erst trauen, wenn die Signatur stimmt.

Standard-Claims im JWT

Das sind die in der JWT-Spezifikation (RFC 7519) registrierten Claims. Jede Anwendung darf zusätzlich eigene Custom Claims definieren.

ClaimNameBedeutung
issIssuerWer den Token erstellt und signiert hat
subSubjectWorum es im Token geht – meistens eine User-ID
audAudienceFür wen der Token gedacht ist
expExpirationUnix-Timestamp, ab dem der Token ungültig ist
nbfNot BeforeVor diesem Zeitpunkt darf der Token nicht akzeptiert werden
iatIssued AtWann der Token ausgestellt wurde
jtiJWT IDEindeutige Kennung – nützlich für Revocation
algAlgorithm (Header)Signaturalgorithmus: HS256, RS256, ES256, …

JWT-Beispiele zum Ausprobieren

Einen typischen JWT inspizieren

Token

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJ1c2VyXzEyMyIsInJvbGUiOiJzdHVkZW50IiwiZXhwIjoxNzEwMDAwMDAwfQ.Q3hH8yzqI2OsHJ1Lyj8jJfJPa5ZpIVlh1FhJpJbqMcs

Header
{  "alg": "HS256",  "typ": "JWT"}
Payload
{  "sub": "user_123",  "role": "student",  "exp": 1710000000}

Im Header steht HS256 (ein Algorithmus mit gemeinsamem Secret). Der Payload nennt den Nutzer, seine Rolle und die Ablaufzeit. Der dritte Teil ist die Signature. (Es ist ein Beispiel-Token zur Demonstration – die Signature passt zu keinem echten Secret.)

Prüfen, ob ein Token abgelaufen ist

Payload-Claim
{  "exp": 1710000000}

exp ist ein Unix-Timestamp in Sekunden. Rechne ihn in ein Datum um – liegt es in der Vergangenheit, ist der Token abgelaufen und ein korrekt implementiertes Backend lehnt ihn ab.

Den gefährlichen "none"-Algorithmus erkennen

Header
{  "alg": "none",  "typ": "JWT"}

Akzeptiert ein Server "alg": "none", kann ein Angreifer einen beliebigen Payload ganz ohne Signatur fälschen. In Produktion gehört dieser Header strikt abgewiesen.

Typische Fehler im Umgang mit JWTs

  • Passwörter, Secrets oder sensible personenbezogene Daten in den Payload schreiben. JWTs sind lesbar, nicht verschlüsselt.
  • Einen Token dekodieren und ihn dann für gültig halten, ohne die Signatur zu prüfen.
  • Base64URL-Lesbarkeit mit Verschlüsselung verwechseln – JWT-Payloads sind absichtlich offen lesbar.

FAQ zu JWT

Was ist ein JWT?
JWT steht für JSON Web Token. Das ist ein kompaktes, signiertes, URL-sicheres Tokenformat, mit dem Claims zwischen zwei Parteien übertragen werden – meistens zwischen Server und Browser, um einen eingeloggten Nutzer abzubilden.
Wie dekodiere ich einen JWT?
Füge den Token in einen JWT Decoder ein – oder splitte ihn an den Punkten und Base64URL-dekodiere die ersten beiden Teile. Header und Payload kommen als JSON heraus, der dritte Teil ist die Signature.
Wie prüfe ich, ob ein JWT abgelaufen ist?
Schau auf den exp-Claim im Payload. Er ist ein Unix-Timestamp in Sekunden. Liegt die aktuelle Zeit hinter exp, ist der Token abgelaufen.
Kann jeder einen JWT dekodieren?
Ja. Header und Payload sind Base64URL-codiert, nicht verschlüsselt. Die Signature beweist nur, dass der Token nicht manipuliert wurde – sie versteckt den Inhalt nicht.
Was bedeutet JWT-Verifikation?
Bei der Verifikation berechnet der Server die Signatur mit dem erwarteten Secret oder Public Key neu und vergleicht sie mit der Signatur im Token. Stimmen beide überein, ist der Payload vertrauenswürdig und unverändert.
Sollte ich Passwörter in einem JWT speichern?
Nein. Wer den Token hat, kann den Payload lesen. Speichere dort nur unkritische Identifier und Claims und setze für die Sicherheit auf kurze Laufzeiten plus Refresh Tokens.

Mehr erfahren

Weitere Entwickler-Tools

Lerne mit Coddy zu programmieren

LOS GEHT'S