JWT-Decoder

Fügen Sie ein JSON Web Token ein und lesen Sie, was darin steht: wer es ausgestellt hat, für wen es gilt, was es erlaubt und wann es aufhört zu funktionieren. Das Token verlässt diese Seite nie.

Das Token wird auf dieser Seite dekodiert, während Sie tippen oder einfügen: Es wird nicht an uns gesendet, nicht gespeichert und nicht an die Adresse angehängt. Ein vorangestelltes Bearer und Zeilenumbrüche werden ignoriert.

Behandeln Sie ein echtes Produktions-Token wie ein Passwort: Bis es abläuft, kann jeder, der es besitzt, in Ihrem Namen handeln. Fügen Sie es also in keine Website ein, die Sie nicht selbst kontrollieren.

Drei Textstücke, durch Punkte verbunden

Sobald Sie sich bei einer Website angemeldet haben, muss der Server Sie bei der nächsten Anfrage wiedererkennen. Ein verbreiteter Weg: Ihr Browser bekommt eine kurze signierte Notiz, die besagt „das ist Benutzer 48213, darf Bestellungen lesen, bis 15:15 Uhr“. Diese Notiz ist ein JSON Web Token, kurz JWT.

Ein JWT sieht aus wie eine lange Zufallszeichenkette, hat aber immer dieselbe Form, header.payload.signature.

  • Der Header ist ein kleines JSON-Objekt, das den Signaturalgorithmus nennt (alg) und oft den verwendeten Schlüssel (kid).
  • Die Payload ist ein JSON-Objekt aus Claims, also Aussagen wie sub (wer), aud (für welchen Dienst) und exp (bis wann).
  • Die Signatur ist ein Siegel, berechnet aus den ersten beiden Teilen und einem Schlüssel.

Header und Payload sind in Base64URL geschrieben, einer Art, Bytes mit Buchstaben, Ziffern, - und _ zu buchstabieren, damit sie den Weg durch eine Adresse oder einen HTTP-Header überstehen. Deshalb beginnt auch fast jedes Token mit eyJ: So kommt {" in dieser Kodierung heraus.

Kodiert ist nicht verschlüsselt

Base64URL ist eine Schreibweise. Es verschließt nichts, und für die Rückwandlung in Text braucht man keinen Schlüssel, genau das macht diese Seite. Ein signiertes JWT verbirgt also überhaupt nichts. Enthält die Payload eine E-Mail-Adresse, eine Rolle oder eine interne ID, kann jeder sie lesen, der an das Token kommt, ob Browser-Erweiterung, Proxy-Log oder Screenshot.

Was die Signatur Ihnen gibt, ist Integrität. Ändern Sie ein Zeichen der Payload, passt das Siegel nicht mehr, und der Server weist das Token ab. Lesen kann man es weiterhin. Nur umschreiben kann man es nicht.

Ein Token aus fünf Teilen ist ein anderes Objekt, ein JWE, und sein Inhalt ist wirklich verschlüsselt. Dieses Tool zeigt seinen Header, erklärt die fünf Teile und hört dort auf. Es fragt nie nach einem Schlüssel.

Was diese Seite liest und was sie markiert

Der Decoder entfernt ein führendes Bearer, Leerzeichen und Zeilenumbrüche, zerlegt das Token und gibt Header und Payload als formatiertes JSON aus. Dann geht er die Claims einzeln durch. Die drei Zeitangaben, exp, nbf (nicht vor) und iat (ausgestellt am), sind Sekunden seit dem 1. Januar 1970. Sie sehen sie in Ihrer Zeitzone und in UTC, mit einem Live-Zähler wie „noch 12 Minuten gültig“.

BefundWarum es wichtig ist
Abgelaufen oder noch nicht gültigVerglichen mit der Uhr Ihres Geräts. Ein korrekter Server weist das Token ab.
Kein exp-ClaimDas Token funktioniert für immer, es sei denn, der Server führt eine Liste widerrufener Tokens.
Laufzeit über 30 TageEin gestohlenes Token bleibt so lange nützlich.
alg ist noneDas Token ist nicht signiert. Jeder kann eines schreiben.
Zeitangaben in MillisekundenEin 1.000-mal zu großer Wert bedeutet, dass das Token für einen strengen Empfänger nie abläuft.
Personenbezogene Daten oder ein Feld, das wie ein Geheimnis heißtJeder, der das Token hat, kann es lesen.
jku, x5u oder jwk im HeaderDas Token verweist auf seinen eigenen Schlüssel, und das kann ein Fälscher auch.

Sie bekommen auch ein Wort zum Algorithmus. HS256 nutzt ein gemeinsames Geheimnis zum Signieren und zum Prüfen. RS256, ES256 und EdDSA nutzen ein Schlüsselpaar, bei dem ein privater Schlüssel signiert und ein öffentlicher prüft, sodass Dienste, die Tokens nur prüfen, keine erzeugen können.

Was Dekodieren Ihnen nicht sagen kann

Diese Seite prüft die Signatur nicht. Dafür bräuchte sie das Geheimnis oder den öffentlichen Schlüssel des Ausstellers, und eine Seite, die nach Ihrem Signaturgeheimnis fragt, sollten Sie schließen. Deshalb sehen ein gefälschtes und ein echtes Token hier gleich aus. Lesen Sie die Ausgabe als „das behauptet das Token“, nie als „dieses Token ist gültig“.

Aus demselben Grund heißt „nicht abgelaufen“ nur, dass exp später liegt als die Uhr Ihres Geräts. Der Server hat das Token vielleicht vor einer Stunde widerrufen.

Wenn Sie die Empfängerseite schreiben, finden die entscheidenden Prüfungen in Ihrem Code statt. Akzeptieren Sie nur die Algorithmen, die Sie erwarten, prüfen Sie die Signatur mit einem Schlüssel, dem Sie bereits vertrauen, und vergleichen Sie dann iss, aud und exp mit Ihren Erwartungen. Verwenden Sie eine gepflegte Bibliothek und verzweigen Sie nie anhand des alg, das das Token verlangt.

Ein gültiges Token ist ein Zugangsnachweis

Bis es abläuft, funktioniert ein Bearer-Token für jeden, der es vorzeigt. Fügen Sie ein Produktions-Token in eine Website ein, haben Sie es dieser Website übergeben, es sei denn, das Dekodieren geschieht in Ihrem Browser. Hier ist das so. Keine Anfrage trägt das Token, es landet nicht in der Adressleiste und wird nicht im Browser-Speicher abgelegt. Sie müssen uns nicht beim Wort nehmen: Beobachten Sie den Netzwerk-Tab der Entwicklertools, oder laden Sie die Seite und gehen Sie vor dem Einfügen offline.

Trotzdem ist die sicherste Gewohnheit, mit Tokens eines Testkontos oder mit abgelaufenen zu debuggen. Landet ein echtes Token in einem Chat, einem Ticket oder einem öffentlichen Log, melden Sie sich überall ab oder lassen Sie es vom Aussteller widerrufen.

Häufige Fragen

Ist es sicher, ein JWT in einen Online-Decoder einzufügen?

Nur wenn der Decoder in Ihrem Browser arbeitet und nichts sendet. Dieser hier zerlegt und dekodiert das Token lokal, stellt damit keine Anfrage und speichert nichts. Für Produktions-Tokens ist ein abgelaufenes oder eines aus einem Testkonto trotzdem die bessere Wahl.

Kann man ein JWT ohne den geheimen Schlüssel dekodieren?

Ja. Header und Payload sind Base64URL-Text, den jeder zurück in JSON verwandeln kann. Das Geheimnis oder den Schlüssel brauchen Sie nur, um die Signatur zu prüfen oder ein Token zu erzeugen, das ein Server akzeptiert.

Was bedeuten exp, iat und nbf in einem JWT?

exp ist der Zeitpunkt, ab dem das Token nicht mehr akzeptiert wird, iat der Zeitpunkt der Ausstellung und nbf der Zeitpunkt, ab dem es akzeptiert wird. Alle drei sind Sekunden seit dem 1. Januar 1970 (UTC), keine Millisekunden.

Warum beginnt mein Token mit eyJ?

Der Header ist ein JSON-Objekt, beginnt also mit {", und diese Zeichen ergeben in Base64 immer eyJ. Die Payload beginnt aus demselben Grund genauso.

Was ist der Unterschied zwischen HS256 und RS256?

HS256 signiert und prüft mit einem gemeinsamen Geheimnis, also könnte jeder Dienst, der ein Token prüfen kann, auch eines fälschen. RS256 signiert mit einem privaten Schlüssel und prüft mit einem öffentlichen. Dann können viele Dienste Tokens prüfen, während nur der Aussteller sie erzeugen kann.

Warum ist ein Token mit alg none gefährlich?

Es trägt keine Signatur, also kann jeder seinen Inhalt ändern. Ein Server, der es akzeptiert, lässt Leute ihre eigene Benutzer-ID oder Rolle wählen. Empfänger müssen die akzeptierten Algorithmen festlegen und alles andere ablehnen.