JWT-Decoder
Läuft in deinem Browser; nichts wird hochgeladen
Header und Claims eines JSON Web Token lesen, sehen, wann er abläuft, und die Signatur mit deinem Secret oder Public Key prüfen.
Token
Verify signature
Paste a token to check its signature against a secret or public key.
No token yet
Was ist ein JWT?
Ein JSON Web Token (JWT) ist eine kompakte, signierte Art, Claims zwischen zwei Parteien weiterzugeben, meist von einem Authentifizierungsserver an eine API. Er besteht aus drei Base64url-Strings, verbunden durch Punkte, header.payload.signature, und APIs erwarten ihn meist im Header Authorization: Bearer <token>.
Der Header sagt, wie der Token signiert ist, zum Beispiel "alg": "HS256" für einen HMAC mit gemeinsamem Secret oder RS256 für ein RSA-Schlüsselpaar. Die Payload enthält die Claims: Standard-Claims wie sub (um wen es im Token geht), iat (wann er ausgestellt wurde) und exp (wann er abläuft), dazu alles, was der Aussteller ergänzt, etwa Rollen oder Scopes.
Die Signatur macht einen Token vertrauenswürdig. Der Aussteller berechnet sie mit seinem Schlüssel über Header und Payload, deshalb macht schon ein geändertes Zeichen in der Payload sie ungültig. Die Payload ist kodiert, nicht verschlüsselt: Jeder mit dem Token kann alle Claims lesen. Pack also nie Geheimnisse hinein und behandle den Token selbst wie ein Passwort, bis er abläuft.
So benutzt du dieses Tool
- 1Füge einen Token in den Bereich Token ein oder wähle einen aus Examples. Ein
Bearer-Präfix, einAuthorization:-Headername, Anführungszeichen und Zeilenumbrüche werden ignoriert, und die Kopfzeile des Bereichs sagt, was ignoriert wurde. - 2Header, Payload und Signatur sind im Token farbig markiert. Payload und Header zeigen die Teile als JSON; Claims listet jeden Claim mit seiner Bedeutung und zeigt
iat,nbfundexpals Datum in deiner Zeitzone, mit Abstand zu jetzt. - 3Die Statusleiste zeigt den Algorithmus, wann der Token abläuft oder abgelaufen ist und ob die Signatur geprüft wurde. Warnungen wie
alg: noneoder ein fehlendesexpstehen oben unter Claims. - 4Um die Signatur zu prüfen, gibst du das gemeinsame Secret ein (HS256, HS384, HS512; schalte auf Base64 um, wenn das Secret kodiert ist) oder fügst den Public Key des Ausstellers ein (RS*, PS*, ES*, EdDSA), als PEM, X.509-Zertifikat, JWK oder JWK-Set. Das Ergebnis erscheint schon beim Tippen.
- 5Lässt sich der Token nicht dekodieren, nennt die Meldung den Teil und das fehlerhafte Zeichen; mit F8 markierst du es.
Fehlerbehebung
- Dieser Token hat 5 Teile: Er ist ein verschlüsselter JWE
- Manche Identity Provider stellen verschlüsselte Tokens (JWE) aus. Deren Payload lässt sich nur mit dem Private Key des Empfängers lesen, ohne diesen Schlüssel kann sie also kein Decoder anzeigen.
+ist Standard-Base64; JWTs nutzen Base64url- Der Token wurde neu kodiert oder von Hand mit Standard-Base64 gebaut. JWT-Teile verwenden
-und_statt+und/, ohne=-Auffüllung. - Die Signatur passt nicht zu diesem Secret
- Prüfe, ob das Secret genau dem des Ausstellers entspricht, inklusive Groß- und Kleinschreibung und Leerzeichen am Ende, und ob es als Base64 gespeichert ist; falls ja, stell das Secret-Format auf Base64 um.
- Das ist ein PKCS#1-RSA-Schlüssel (BEGIN RSA PUBLIC KEY)
- Browser importieren nur Schlüssel im SubjectPublicKeyInfo-Format. Wandle ihn mit
openssl rsa -RSAPublicKey_in -in key.pem -puboutum oder füge stattdessen den JWK vom JWKS-Endpoint des Ausstellers ein. - Das Key-Set enthält keinen Schlüssel mit dieser kid
- Aussteller rotieren ihre Schlüssel. Hol dir das aktuelle JWK-Set von der
jwks_urides Ausstellers und füge es erneut ein; das Tool wählt den Schlüssel, dessenkidzum Header des Tokens passt.
Häufige Fragen
Ist es sicher, hier einen echten Token oder ein echtes Secret einzufügen?
Dekodieren und Signaturprüfung laufen mit Web Crypto in deinem Browser, und nichts wird irgendwohin geschickt. Der Token bleibt im Session Storage dieses Tabs, bis du ihn löschst oder den Tab schließt, ein Neuladen verliert ihn also nicht; das Secret oder der Schlüssel zum Prüfen wird nie gespeichert, und Tokens landen nie in Links. Trotzdem gewährt ein gültiger Token Zugriff, bis er abläuft. Nimm also lieber Test- oder abgelaufene Tokens, und füge Signatur-Secrets aus der Produktion nie in eine Website ein, die du nicht selbst kontrollierst.
Was bedeutet "Signature verified"?
Dass Header und Payload mit dem Secret signiert wurden, oder mit dem Private Key, der zum angegebenen Public Key gehört. Ob der Token akzeptabel ist, sagt das nicht: Deine API muss auch exp, nbf, den Aussteller (iss) und die Zielgruppe (aud) prüfen und festlegen, welche Algorithmen sie akzeptiert.
Warum ist alg none gefährlich?
Ein Token mit "alg": "none" hat keine Signatur, also kann jeder einen mit beliebigen Claims schreiben. Bibliotheken, die ihn versehentlich akzeptieren, lassen Angreifer Tokens fälschen. Server sollten unsignierte Tokens ablehnen.
In welchem Format sind iat, nbf und exp?
In Sekunden seit dem 1. Januar 1970 UTC (Unix-Zeit). Ein 13-stelliger Wert sind Millisekunden, ein häufiger Fehler bei Token-Ausstellern; das Tool warnt davor. Der Unix-Timestamp-Konverter macht aus jedem dieser Werte ein Datum.
Warum wird mein Token abgelehnt, obwohl er sich dekodieren lässt?
Häufige Ursachen sind eine Signatur mit einem anderen Schlüssel, ein falsches aud oder iss, ein Token, der vor seiner nbf-Zeit oder nach exp benutzt wird, oder abweichende Uhren zwischen Servern. Lies die Fehlerantwort der API und vergleiche diese Claims.