Dekodieren liest das Token nur; geprüft ist es erst, wenn die Signatur mit dem richtigen Schlüssel verifiziert wurde.
Dieser JWT-Decoder zerlegt ein JSON Web Token in Header, Payload und Signatur und zeigt die Claims als lesbares JSON, wobei exp, iat und nbf in lokale Zeiten umgerechnet werden. Er prüft außerdem HS-, RS-, PS- und ES-Signaturen und signiert neue HS256-Tokens. Alles läuft im Browser über die Web Crypto API.
Anleitung
- JWT einfügen. Header, Payload und Signatur werden beim Einfügen eingefärbt und dekodiert.
- Claims lesen: exp, iat und nbf erscheinen in deiner Ortszeit, mit „in 3 Stunden“ oder „vor 2 Tagen“.
- Zum Prüfen der Signatur das Secret eingeben (HS256/384/512) oder den Public Key als PEM, X.509-Zertifikat oder JWK einfügen (RS-, PS- und ES-Algorithmen).
- Auf Header oder Payload tippen, um sie als formatiertes JSON zu kopieren.
- Zu Erstellen wechseln, um ein neues HS256/384/512-Token mit eigenem Payload und Secret zu signieren.
- Nichts verlässt deinen Browser: Dekodieren und Prüfen nutzen die eingebaute Web Crypto API, Tokens und Schlüssel werden nie gespeichert oder gesendet.
- Jeder kann ein JWT dekodieren: Der Payload ist nur Base64URL-kodiert, nicht verschlüsselt. Nie Geheimnisse hineinschreiben.
- Ein Token mit alg „none“ hat keine Signatur. Server müssen es ablehnen.
- Unterstützt: HS256, HS384, HS512, RS256, RS384, RS512, PS256, PS384, PS512, ES256, ES384 und ES512. Ein JWKS ({"keys": […]}) funktioniert auch; der Schlüssel wird per kid gewählt.
- „Base64-Secret“ einschalten, wenn dein Secret Base64-kodiert gespeichert ist, wie bei manchen Anbietern.
So ist ein JWT aufgebaut
Ein JWT (RFC 7519) besteht aus drei Base64URL-Teilen, getrennt durch Punkte: Header.Payload.Signatur. Der Header nennt den Algorithmus, etwa {"alg":"HS256","typ":"JWT"}. Die Payload enthält Claims wie sub (Subjekt), iss (Aussteller), aud (Empfänger), exp (Ablauf), iat (ausgestellt) und nbf (nicht vor). Zeiten sind Sekunden seit dem 1. 1. 1970 UTC: exp 1767225600 entspricht dem 1. 1. 2026, 00:00 UTC.
Die Signatur wird über die ersten beiden Teile berechnet. Bei HS256 ist sie ein HMAC-SHA256 mit gemeinsamem Secret, bei RS256 oder PS256 eine RSA-Signatur, bei ES256 eine ECDSA-Signatur auf der Kurve P-256 (RFC 7518).
Dekodieren ist nicht verifizieren
Jeder kann ein JWT lesen: Base64URL ist eine Kodierung, keine Verschlüsselung. Passwörter und personenbezogene Daten gehören deshalb nicht in die Payload. Vertrauen sollte man einem Token erst, wenn die Signatur mit dem richtigen Schlüssel stimmt und exp und nbf eingehalten sind. Ein Token mit alg none hat gar keine Signatur und muss vom Server abgelehnt werden. Für HS256 sollte das Secret mindestens 32 zufällige Bytes lang sein.
Welche Schlüssel funktionieren
Für HS256, HS384 und HS512 das gemeinsame Secret eingeben, als Text oder Base64. Für RS, PS und ES den öffentlichen Schlüssel als PEM, X.509-Zertifikat, JWK oder komplettes JWKS einfügen; bei einem JWKS wird der Schlüssel über die kid im Header gewählt. Tokens und Schlüssel werden weder gespeichert noch gesendet.
Häufige Fragen
Kann ich hier gefahrlos ein JWT einfügen?
Ja. Das Token wird im Browser dekodiert und geprüft und weder gesendet noch gespeichert. Produktions-Tokens sollte man trotzdem wie Passwörter behandeln und lieber abgelaufene oder Test-Tokens nehmen.
Lässt sich ein JWT ohne Secret dekodieren?
Ja. Header und Payload sind nur Base64URL-kodiert und damit für jeden lesbar. Secret oder öffentlicher Schlüssel werden nur gebraucht, um die Signatur zu prüfen.
Was bedeutet der Claim exp?
exp ist der Ablaufzeitpunkt in Sekunden seit dem 1. 1. 1970 UTC. Danach muss das Token abgelehnt werden. Hier wird er in deiner Ortszeit angezeigt, etwa mit dem Hinweis vor 2 Tagen abgelaufen.
Was ist der Unterschied zwischen HS256 und RS256?
HS256 signiert mit einem gemeinsamen Secret, das Aussteller und Prüfer kennen müssen. RS256 signiert mit einem privaten RSA-Schlüssel und wird mit dem öffentlichen geprüft, der Prüfer hat also nie den Signaturschlüssel.
Warum schlägt die Signaturprüfung fehl?
Meist ist das Secret falsch oder Base64-kodiert, der öffentliche Schlüssel passt nicht zur kid, oder das Token wurde nach dem Signieren verändert. Schalte Base64-Secret ein, wenn dein Anbieter das Secret so speichert.
Kann ich hier ein JWT erstellen?
Ja. Der Tab Erstellen signiert ein Token mit HS256, HS384 oder HS512 aus deiner Payload und deinem Secret. RSA- und EC-Signaturen gibt es nicht, weil sie einen privaten Schlüssel erfordern.