JWT Decoder
Decode and inspect JWT tokens — header, payload and claims.
Geprüft von Aygul Dovletova · Zuletzt geprüft
So verwendest du den JWT-Dekoder
- Füge dein Token in den großen Eingabebereich ein. Ein JWT ist drei Base64URL-kodierte Segmente, die durch Punkte verbunden sind, typischerweise beginnend mit
eyJ, weil das die Base64URL-Kodierung von{"ist. - Klicke auf "Dekodieren" (oder warte auf das automatische Dekodieren beim Einfügen). Das Panel teilt sich in drei Spalten auf: Header, Payload und Signatur.
- Lies den Header, um den Signierungsalgorithmus (
alg) und den Token-Typ (typ) zu sehen. Alles außernonebedeutet, dass eine Signatur vorhanden ist. - Inspiziere den Payload, um jeden Claim zu lesen. Registrierte Claims (
iss,sub,aud,exp,nbf,iat,jti) erhalten freundliche Beschriftungen, und Zeitstempel-Claims werden von Unix-Sekunden in dein lokales Datum und Uhrzeit umgewandelt. - Überprüfe das Ablaufzeit-Badge neben
exp, um zu sehen, ob das Token noch gültig ist, wie lange es abläuft oder wie lange es abgelaufen ist. - Kopiere ein beliebiges Segment mit den Kopier-Schaltflächen neben jedem Panel, damit du dekodiertes JSON in Postman, curl oder deine IDE einfügen kannst.
Was dieses Tool macht und wie es funktioniert
Der Dekoder teilt das Token auf den zwei Punkt-Trennzeichen in seine drei Segmente auf, dann läuft jedes durch einen Base64URL-Dekoder, der - und _ zurück zu Standard + und / substituiert, auf ein Vielfaches von vier neu auffüllt und atob plus einen UTF-8-TextDecoder verwendet, um JSON-Text zu erzeugen. JSON.parse wandelt das in ein Objekt um, das Preact als hübsch gedruckten Baum rendert. Das Signatur-Segment wird als rohes Base64URL belassen, weil seine Verifizierung den Servergeheimnis (für HMAC) oder den öffentlichen Schlüssel (für RSA oder ECDSA) erfordern würde, und das Offenlegen dieser im Browser besiegt den Sinn des Signierens. Die gesamte Pipeline ist reines JavaScript: kein fetch, kein XHR, kein Service Worker. Dein Token überschreitet niemals die Tab-Grenze.
Wann du dies verwenden würdest
- Debuggen einer 401-Antwort von deiner API und Prüfen, ob der
aud-Claim tatsächlich der erwarteten Zielgruppe entspricht. - Überprüfen, dass ein neu geprägtes Zugriffs-Token die Rollen oder Bereiche trägt, nach denen deine Autorisierungs-Middleware sucht.
- Bestätigen, dass dein Identitätsanbieter benutzerdefinierte Claims unter dem Namespace kodiert, den du in Auth0, Okta, Keycloak oder Cognito konfiguriert hast.
- Den
exp-Claim lesen, um zu bestätigen, dass ein kurzlebiges Token wirklich kurzlebig ist, bevor du es in die Produktion auslieferst. - Einem Teamkollegen beibringen, warum das Speichern von PII im Payload eine schlechte Idee ist - der Payload ist signiert, nicht verschlüsselt, und jeder mit dem Token kann ihn lesen.
- Die Claims in einem funktionierenden Token mit einem defekten vergleichen, wenn du mit einem neuen Partner integrierst.
Häufige Fallstricke und Randfälle
- JWT mit JWE verwechseln. Ein fünfsegmentiges Token (vier Punkte) ist ein verschlüsseltes JWE und kann ohne den Entschlüsselungsschlüssel nicht gelesen werden. Dieser Dekoder behandelt nur dreisegmentige JWS.
- Padding-Fehler beim Kopieren. Einige Logger kürzen die Signatur. Der Header und Payload dekodieren noch, aber dein nachgelagerter Prüfer lehnt das Token ab.
- Takt-Versatz. Ein Token, das um eine Sekunde abgelaufen aussieht, kann noch vom Server akzeptiert werden dank eines Toleranzfensters (normalerweise 30-60 Sekunden). Die Benutzeroberfläche zeigt deine Lokalzeit, die vom Uhrzeitstempel des Ausstellers abweichen kann.
- Verschachteltes JSON in Claims. Einige IdPs serialisieren Rollen als JSON-String innerhalb eines Claims statt als Array. Der Dekoder zeigt den rohen String - parse ihn ein zweites Mal, um das Array zu inspizieren.
- UTF-8 im Payload. Claims mit Nicht-ASCII-Text (Namen, Beschriftungen in anderen Schriften) verlassen sich auf korrektes UTF-8-Dekodieren. Das Tool verwendet
TextDecoder("utf-8"), sodass Multi-Byte-Sequenzen und Surrogatpaare den Roundtrip überleben.
JWT-Format auf einen Blick
JSON Web Token sind durch RFC 7519 definiert, das auf JWS (RFC 7515) für Signierung und JWA (RFC 7518) für Algorithmus-Bezeichner aufbaut. Eine JWS-kompakte Serialisierung ist BASE64URL(header) "." BASE64URL(payload) "." BASE64URL(signature). Das Header-Objekt muss alg (den Signierungsalgorithmus wie HS256, RS256, ES256 oder EdDSA) enthalten und enthält normalerweise typ: "JWT". Der Payload ist ein Satz von Claims. Sieben Namen sind in RFC 7519 selbst registriert; öffentliche Claims leben im IANA-JSON-Web-Token-Claims-Register; private Claims sind, was deine Anwendung erfindet. Wichtig ist, dass ein JWT signiert, nicht verschlüsselt ist - alles außer der Signatur ist im Klartext, und jeder kann es Base64URL-dekodieren. Behandle JWTs als Bearer-Token: Besitz ist Autorisierung.
Vergleich zu Alternativen
Auf der Kommandozeile kannst du dasselbe Dekodieren mit cut -d. -f2 <<< "$TOKEN" | base64 -d | jq erreichen, aber das ist umständlich mit Base64URL-Padding und zeigt keinen Ablaufstatus an. Dedizierte CLIs wie jwt-cli (cargo install jwt-cli) und step jwt inspect von Smallstep sind ausgezeichnet, wenn du bereits ein Terminal offen hast. IDE-Plugins wie die JWT-Erweiterung für VS Code dekodieren Token inline in deinem Editor. Browser-Erweiterungen existieren, lesen aber typischerweise Seiteninhalte - ein echtes Risiko, wenn du Arbeits-Token in localStorage hast. Für die Verifizierung von Signaturen benötigst du noch ein Backend oder eine Bibliothek wie jose, pyjwt oder jsonwebtoken, weil nur sie den Schlüssel haben. Verwende diese Seite, wenn du eine schnelle schreibgeschützte Inspektion ohne Installation von etwas benötigst.
Häufig gestellte Fragen
Was ist ein JSON Web Token in einem Absatz?
Ein JWT ist ein kompakter, URL-sicherer String, der Claims als JSON bündelt und eine kryptografische Signatur anhängt, die beweist, dass der Aussteller ihn erstellt hat. Er besteht aus einem Header, der den Algorithmus beschreibt, einem Payload mit den Claims und einer Signatur über die ersten zwei Segmente. Da er in sich abgeschlossen und signiert ist, kann ein Dienst ihn validieren, ohne den Aussteller zurückzurufen, weshalb er zustandslose APIs dominiert. RFC 7519 ist die maßgebliche Spezifikation.
Verifiziert dieser Dekoder die Signatur?
Nein, und das absichtlich. Die Verifizierung erfordert das Aussteller-Geheimnis (HS256) oder den öffentlichen Schlüssel an einem JWKS-Endpunkt (RS256, ES256, EdDSA). Das Abrufen dieser würde dein Token über das Netzwerk senden. Verwende eine serverseitige Bibliothek wie jose, jsonwebtoken, pyjwt oder jjwt zur Verifizierung; dieses Tool ist streng ein schreibgeschützter Inspektor.
Ist es sicher, Produktions-Token in diese Seite einzufügen?
Das Dekodieren läuft vollständig in deinem Browser-Tab ohne fetch-Aufruf und ohne Analytics-Beacon, der das Token empfängt. Dennoch sind Tokens Bearer-Anmeldedaten - jeder mit deinem Bildschirm oder deinem Zwischenablagen-Verlauf kann sich als du ausgeben, bis das Token abläuft. Widerrufe oder rotiere alle Token, von denen du vermutest, dass sie offengelegt wurden, und bevorzuge ein Staging-Token beim Demonstrieren dieses Tools.
Warum zeigen Zeitstempel-Claims als Daten statt Zahlen?
exp, iat, nbf und auth_time sind NumericDate-Werte, die in RFC 7519 als Sekunden seit der Unix-Epoche definiert sind. Der Dekoder multipliziert mit 1000, übergibt an Date und formatiert mit Intl.DateTimeFormat in deinem Locale. Die rohe Ganzzahl wird daneben für Copy-Paste angezeigt.
Welche Algorithmen können im alg-Header erscheinen?
RFC 7518 registriert HS256/384/512 (HMAC-SHA-2), RS256/384/512 (RSASSA-PKCS1-v1_5), PS256/384/512 (RSASSA-PSS), ES256/384/512 (ECDSA) und EdDSA (Ed25519/Ed448, RFC 8037). alg: none zeigt unsigned an - historisch eine Quelle schwerer Sicherheitslücken und von modernen Bibliotheken abgelehnt.
Warum beginnt mein Token mit eyJ?
Der JWT-Header ist ein JSON-Objekt, das mit einer öffnenden Klammer und einem zitierten Schlüssel beginnt, zum Beispiel die zwei Bytes {". Wenn Base64URL-kodiert, werden diese Bytes zu eyJ, weshalb praktisch jeder JWT, den du je sehen wirst, mit diesen drei Buchstaben beginnt. Das ist ein nützlicher Geruch-Test: Wenn ein vermeintlicher JWT nicht mit eyJ beginnt, ist es wahrscheinlich ein anderes Token-Format oder wurde während der Übertragung beschädigt.
Wie lange sollte ein JWT leben, bevor er abläuft?
OWASP-Anleitung: Zugriffs-Token kurzlebig (5-60 Minuten), rotiert mit Refresh-Token in sicherem Speicher. Langlebige JWTs sind schwer zu widerrufen, weil sie in sich abgeschlossen sind - ohne eine Deny-Liste gibt es keine Möglichkeit, einen vor seinem exp zu invalidieren. Ein 30-Tage-exp ist ein Design-Geruch.
Was ist der Unterschied zwischen dem kid-Header und dem sub-Claim?
Der kid-(Key-ID-)Header lebt im Header-Segment und teilt dem Prüfer mit, welcher öffentliche Schlüssel, von möglicherweise vielen an einem JWKS-Endpunkt veröffentlichten, verwendet wurde, um dieses Token zu signieren. Der sub-(Subject-)Claim lebt im Payload und identifiziert den Prinzipal, um den es beim Token geht - normalerweise eine Benutzer-ID oder ein Service-Konto. Sie sind unabhängig; kid ist für die Schlüsselrotation auf der Aussteller-Seite, sub ist der Geschäfts-Bezeichner auf der Verbraucher-Seite.
Kann ein JWT binäre Daten enthalten?
Nicht direkt. Der Payload muss ein gültiges JSON-Objekt gemäß RFC 7159 sein, und JSON hat keinen Binärtyp. Wenn du Bytes liefern musst (ein Zertifikat- Fingerabdruck, ein Bild-Hash), Base64URL-kodiere sie in einen String-Claim. Da das Token selbst bereits Base64URL-kodiert ist, erhältst du Doppel-Kodierung, daher halte Payloads klein; einige Hundert Bytes ist typisch und zehn Kilobytes beginnt, HTTP-Header-Größenprobleme zu verursachen.
Warum ist der Payload ohne Schlüssel lesbar?
JWS (RFC 7515) bietet Integrität, aber keine Vertraulichkeit. Der Payload ist Base64URL-kodiert, nicht verschlüsselt, sodass jeder, der das Token erfasst, es lesen kann. Um Inhalte vor Vermittlern zu verbergen, verwende JWE (RFC 7516), das ein fünfsegmentiges Token erzeugt und den Payload verschlüsselt. JWE kann hier nicht dekodiert werden.
Wie unterscheidet sich das vom Ausführen von base64 in einem Terminal?
Das manuelle Dekodieren mit base64 erfordert, dass du auf Punkten aufteilst, URL-sichere Alphabet-Substitutionen korrigierst, Padding wieder hinzufügst und dann das JSON selbst hübsch druckst - normalerweise mit jq. Diese Seite erledigt das alles automatisch, beschriftet die registrierten Claims, wandelt NumericDate-Werte in menschlich lesbare Zeiten um und markiert den Ablaufstatus. Für eine schnelle Einmalprüfung ist das schneller; für das Skripten vieler Token paare jwt-cli mit jq stattdessen.
Mehr Developer Tools
AI Token Counter
Count tokens for GPT-4o, Claude, and Gemini models instantly.
Open toolBase64 Encoder & Decoder
Encode UTF-8 text to Base64 online or decode Base64 back to UTF-8 and plain text. Runs in your browser with no upload.
Open toolBulk URL Encode / Decode
Encode or decode many URLs at once. Paste a newline-separated list and the tool processes each line in parallel, preserving order and blank lines.
Open toolchmod Calculator
Calculate and convert Unix file permission modes between octal and symbolic.
Open toolCode Screenshot
Create beautiful code snippet images with customizable themes.
Open toolColor Converter
Convert colors between HEX, RGB, HSL and CMYK formats.
Open tool