JWT-Decoder
Header und Claims eines Tokens lesen und sehen, was es über sich selbst aussagt. Dekodieren, nicht verifizieren.
Dekodieren ist keine Prüfung. Die beiden lesbaren Segmente eines JWT sind bloß Base64 — jede Person kann sie lesen und jede kann sie schreiben. Vertrauenswürdig macht ein Token allein die Signatur, und um sie zu prüfen, braucht es den Schlüssel. Diese Seite hat ihn nicht, fragt nicht danach und behauptet nichts darüber, ob das Token echt ist.
Ein vorangestelltes „Bearer“ wird automatisch entfernt. Nichts, was Sie einfügen, verlässt diese Seite.
Drei Segmente, von denen eines zählt
Ein JWT sind drei mit Punkten verbundene base64url-Zeichenketten. Die ersten beiden sind JSON, das Sie lesen können; das dritte ist eine Signatur über die ersten beiden.
eyJhbGciOiJIUzI1NiJ9 . eyJzdWIiOiIxMjM0In0 . 4fXK...
header payload signatureDer Header nennt den Algorithmus, mit dem signiert wurde. Der Payload trägt die Claims. Verschlüsselt ist keines von beidem — base64 ist Transportkodierung, keine Verschleierung, und wer das Token hat, liest beides in etwa einer Sekunde.
Nur die Signatur leistet Sicherheitsarbeit. Sie belegt, dass die ersten beiden Segmente von jemandem mit dem Signaturschlüssel erzeugt und seither nicht verändert wurden. Ohne sie zu prüfen, ist ein JWT eine selbstbeschreibende Textdatei mit nicht mehr Autorität als jede andere Zeichenkette, die ein Client geschickt hat.
Deshalb sagt Ihnen diese Seite nicht, dass ein Token gültig ist
Verifikation braucht den Schlüssel, und es gibt keine Fassung von „fügen Sie Ihr Signaturgeheimnis in eine Webseite ein“, die ein guter Rat wäre. Stattdessen berichtet das Werkzeug, was das Token über sich selbst sagt: ob es abgelaufen ist, ob sein Startzeitpunkt erreicht ist, ob der Algorithmus symmetrisch oder asymmetrisch ist und ob es behauptet, gar keine Signatur zu benötigen.
alg:none, und warum der Fall lehrreich ist
Die Spezifikation erlaubt "alg": "none" — ein Token ohne Signatur. Der Angriff schreibt sich von selbst: Nehmen Sie ein rechtmäßiges Token, ändern Sie den Payload nach Belieben, setzen Sie den Algorithmus auf none, löschen Sie die Signatur und schicken Sie es ab.
Eine Bibliothek, die den Algorithmus aus dem Header liest und tut, was dort steht, akzeptiert das. Der Angreifer hat die Prüfrichtlinie gewählt, weil die Richtlinie im vom Angreifer kontrollierten Teil der Nachricht stand.
Die verwandte Variante ist die Algorithmusverwechslung. Ein Server, der RS256 prüft, besitzt den öffentlichen Schlüssel, und der ist nicht geheim. Ändern Sie den Header auf HS256 — ein symmetrisches Verfahren — und signieren Sie mit diesem öffentlichen Schlüssel als gemeinsamem Geheimnis. Eine naive Bibliothek nimmt für beides dasselbe Schlüsselmaterial, und das gefälschte Token verifiziert.
Beides wird gleich behoben, und das Prinzip lohnt sich auch anderswo: Der Prüfer muss angeben, welche Algorithmen er akzeptiert, statt das Token zu fragen.
Was im Betrieb tatsächlich schiefgeht
| Symptom | Übliche Ursache |
|---|---|
| Direkt nach Ausstellung abgelehnt | Uhrzeitabweichung. iat oder nbf liegen ein paar Sekunden vor der Uhr des Prüfers. Erlauben Sie eine kleine Toleranz. |
| Lokal in Ordnung, im Betrieb nicht | Unterschiedliche Signaturschlüssel je Umgebung — ein Staging-Token an die Produktion geschickt. |
| Signatur gültig, trotzdem abgelehnt | Der Claim aud oder iss passt nicht zu dem, was dieser Dienst erwartet. |
| Funktioniert, hört dann mitten in der Sitzung auf | Ablauf. Kurzlebige Token brauchen einen Refresh-Ablauf, und der ist meist das fehlende Stück. |
| Anfragen scheitern an zu großen Headern | Das Token ist über die Grenze gewachsen. Die meisten Server deckeln Header bei rund 8 KB, Browser ein Cookie bei 4 KB. |
Das Widerrufsproblem
Der Grund, ein JWT zu nehmen, ist, dass die Prüfung ohne Datenbankabfrage auskommt — das Token bringt seinen Beweis mit. Genau deshalb können Sie es auch nicht widerrufen. Bei der Prüfung wird nichts befragt, es gibt also keinen Ort, an dem sich vermerken ließe, dass ein Token nicht mehr gelten soll.
Die Möglichkeiten, keine davon umsonst:
- Kurze Laufzeit plus Refresh-Token. Die Standardantwort. Zugriffstoken leben Minuten, Refresh-Token werden gegen eine Datenbank geprüft und lassen sich widerrufen.
- Eine Sperrliste. Die
jtijedes Tokens gegen einen Speicher widerrufener prüfen — womit die Abfrage zurückkehrt, der das Format entkommen wollte. - Den Signaturschlüssel wechseln. Entwertet alle Token auf einmal, auch die aller anderen.
Wenn Ihnen der sofortige Widerruf einzelner Sitzungen wichtiger ist als zustandslose Prüfung, ist eine undurchsichtige Sitzungskennung mit einem Speicher dahinter der einfachere Entwurf — und er wird unterschätzt.
Verwandt
Alle drei Segmente sind URL-sicheres Base64 ohne Auffüllung — weshalb ein Segment in einem strengen Decoder oft scheitert. Nach dem Dekodieren sind die beiden lesbaren Teile JSON. Und für die Zugangsdaten, für die das Token einsteht, deckt der Stärkeprüfer das andere Ende der Anmeldung ab.
Fragen zu JWTs
Ist ein JWT durch das Dekodieren verifiziert?
Nein, und auf dieser Unterscheidung beruht das ganze Sicherheitsmodell. Header und Payload sind base64url — zum Lesen braucht es nichts. Verifizieren heißt, die Signatur mit dem Schlüssel neu zu berechnen und zu vergleichen; das belegt, dass das Token von der Stelle mit diesem Schlüssel ausgestellt und seither nicht verändert wurde. Ein Decoder ohne Schlüssel sagt Ihnen, was ein Token behauptet; ob Sie es glauben dürfen, sagt nur die Verifikation.
Kann ich ein echtes Token auf einer Website einfügen?
In diese Seite ja — dekodiert wird in Ihrem Browser, und nichts wird übertragen. Der Instinkt hinter der Frage ist aber richtig und sollte bleiben. Ein JWT ist in der Regel ein aktives Zugangsmittel: Wer es besitzt, kann bis zum Ablauf in Ihrem Namen handeln. Einem Decoder, der es an einen Server schickt, hat man damit eine funktionierende Sitzung überreicht. Prüfen Sie bei jedem Werkzeug, wo es arbeitet, bevor Sie ein Produktions-Token einfügen.
Darf ich Geheimnisse in den JWT-Payload legen?
Nein. Der Payload ist signiert, nicht verschlüsselt — er ist für jeden lesbar, der das Token hat, auch für den Nutzer, dem es ausgestellt wurde. Die Signatur garantiert, dass der Inhalt unverändert ist; verborgen wird dadurch nichts. Wenn Sie wirklich einen vertraulichen Payload brauchen, ist das JWE, eine andere und deutlich aufwendigere Spezifikation. In der Praxis ist die bessere Antwort meist, den heiklen Teil auf dem Server zu lassen und nur eine Kennung ins Token zu schreiben.
Was ist die alg:none-Schwachstelle?
Die JWT-Spezifikation erlaubt als „alg“ den Wert „none“, also ein unsigniertes Token. Der Angriff besteht darin, ein gültiges Token zu nehmen, im Payload Administratorrechte zu behaupten, alg auf none zu setzen und die Signatur wegzulassen. Eine Bibliothek, die dem Algorithmusfeld des Headers vertraut, erklärt es für gültig — das Token selbst hatte ja angegeben, dass nicht geprüft werden muss. Alle großen Bibliotheken sind gepatcht, aber die Lehre gilt allgemein: Welche Algorithmen akzeptiert werden, muss der Server entscheiden, nicht das Token.
Wie widerrufe ich ein JWT vor dem Ablauf?
Weitgehend gar nicht, und das ist der Kompromiss, den das Format eingeht. Ein JWT lässt sich ohne Datenbankabfrage verifizieren — das macht es schnell, und genau deshalb weiß nichts, was bei der Prüfung befragt wird, von Ihrem Widerruf. Praktikabel sind kurze Laufzeiten mit Refresh-Token, eine bei jeder Anfrage geprüfte Sperrliste widerrufener Kennungen (womit die vermiedene Abfrage zurückkehrt) oder ein Wechsel des Signaturschlüssels, der alles auf einen Schlag entwertet.
Warum wird mein Token abgelehnt, obwohl es gültig aussieht?
Neben dem Ablauf sind die üblichen Ursachen: eine Uhrzeitabweichung zwischen Aussteller und Prüfer, ein Audience- oder Issuer-Claim, der nicht dem entspricht, was der Server erwartet, oder eine Signatur mit einem anderen Schlüssel als dem des Prüfers — häufig ein Staging-Token gegen die Produktion. Der Decoder oben markiert die zeitlichen Probleme, die er sehen kann; über nicht passende Audience und Schlüssel kann nur der Server Auskunft geben.
Zuletzt geprüft . Etwas veraltet gefunden? Sagen Sie uns Bescheid.
