Zum Hauptinhalt springen
S-EDV news

JWT-Decoder

JSON Web Tokens lesbar machen: Header, Claims mit Ablaufstatus und – wenn Sie Secret oder öffentlichen Schlüssel angeben – die Prüfung der Signatur.

  • Läuft komplett in Ihrem Browser
  • Keine Daten an einen Server
  • Ohne Anmeldung, ohne Tracking

Token

Die HS256-Beispiele sind mit dem Demo-Secret s-edv-demo-secret-nur-zum-ausprobieren signiert. Es wird beim Laden unten eingetragen.

Der Status bezieht sich nur auf die Zeitangaben. Ob das Token echt ist, zeigt erst die Signaturprüfung.

Signatur prüfen

Secret und Schlüssel bleiben in diesem Browserfenster. Sie werden weder gespeichert noch übertragen.

Header


        

Payload


      

Claims

Die Claims erscheinen hier, sobald Sie ein Token einfügen.

So ist ein JSON Web Token aufgebaut

Ein JSON Web Token (JWT, RFC 7519) besteht aus drei Teilen, getrennt durch Punkte: Header, Payload und Signatur. Header und Payload sind JSON-Objekte, die mit Base64url kodiert sind – also mit dem Base64-Alphabet, in dem + und / durch - und _ ersetzt sind und das Füllzeichen = fehlt. Der Header nennt vor allem den Signaturalgorithmus (alg) und oft eine Schlüssel-ID (kid), die Payload enthält die eigentlichen Angaben, die sogenannten Claims.

Wichtig: Kodieren ist kein Verschlüsseln. Jeder, der ein Token sieht, kann Header und Payload lesen – genau das macht dieses Tool. Die Signatur schützt nur davor, dass jemand den Inhalt unbemerkt verändert. Passwörter, API-Schlüssel oder andere vertrauliche Daten gehören deshalb nicht in die Payload. Verschlüsselte Tokens (JWE) haben fünf statt drei Teile; bei ihnen ist nur der Header lesbar.

Die wichtigsten Claims

ClaimBedeutungHinweis
issAusstellermeist die Adresse des Identity Providers
subSubjekteindeutige ID des Benutzers oder Dienstes
audZielgruppeZeichenkette oder Liste; der Empfänger muss sich darin wiederfinden
expAblaufzeitab diesem Zeitpunkt ungültig
nbfgültig abvorher ungültig
iatAusstellungszeitZeitpunkt der Erstellung
jtiToken-IDeindeutige Kennung, z. B. für Sperrlisten

Die Zeitangaben sind Sekunden seit dem 1. Januar 1970 (UTC), also Unix-Zeitstempel. Steht dort eine 13-stellige Zahl, hat der Aussteller vermutlich Millisekunden verwendet – ein häufiger Fehler. Einzelne Werte rechnen Sie mit dem Zeitstempel-Konverter um. OpenID Connect ergänzt weitere Claims wie azp, nonce, auth_time oder email; Anbieter wie Keycloak fügen eigene hinzu, etwa realm_access mit den Rollen.

Signaturalgorithmen im Überblick

algVerfahrenZur Prüfung nötig
HS256, HS384, HS512HMAC mit SHA-2dasselbe Secret wie beim Aussteller
RS256, RS384, RS512RSA (PKCS#1 v1.5)öffentlicher RSA-Schlüssel
PS256, PS384, PS512RSA-PSSöffentlicher RSA-Schlüssel
ES256, ES384, ES512ECDSA mit P-256, P-384, P-521öffentlicher EC-Schlüssel der passenden Kurve
EdDSAEd25519öffentlicher Ed25519-Schlüssel

Bei den HS-Verfahren teilen sich Aussteller und Prüfer ein Secret: Wer prüfen kann, kann auch Tokens erstellen. RFC 7518 verlangt dafür ein Secret, das mindestens so lang ist wie die Hash-Ausgabe, bei HS256 also 256 Bit. Die asymmetrischen Verfahren trennen das: Der Identity Provider signiert mit dem privaten Schlüssel, jeder Dienst prüft nur mit dem öffentlichen. Bei OpenID Connect finden Sie die öffentlichen Schlüssel als JWK-Set unter der Adresse jwks_uri, die im Dokument /.well-known/openid-configuration des Anbieters steht. Dieses JWK-Set können Sie oben direkt einfügen; das Tool wählt den Schlüssel anhand der kid aus dem Header.

Worauf Server bei der Prüfung achten müssen

Ein Dienst, der JWTs annimmt, sollte den erwarteten Algorithmus fest vorgeben, statt dem alg aus dem Token zu vertrauen. Sonst drohen zwei bekannte Angriffe: Tokens mit alg: none ganz ohne Signatur und die Verwechslung von RSA und HMAC, bei der ein Angreifer den öffentlichen RSA-Schlüssel als HMAC-Secret missbraucht. Außerdem gehören exp, nbf, iss und aud zu jeder Prüfung. Viele Bibliotheken erlauben eine kleine Zeittoleranz für abweichende Uhren; dieses Tool rechnet ohne Toleranz mit der Uhr Ihres Geräts.

Ein Token lässt sich auch ohne Tool in der Shell lesen. Base64url muss dafür in normales Base64 mit Padding umgewandelt werden:

p=$(printf '%s' "$TOKEN" | cut -d. -f2 | tr '_-' '/+')
while [ $(( ${#p} % 4 )) -ne 0 ]; do p="$p="; done
printf '%s' "$p" | base64 -d | jq .

Für einzelne Base64-Werte eignet sich auch der Base64-Konverter. Wie Sie einen eigenen Identity Provider aufsetzen, zeigen die Anleitungen zu Keycloak, Zitadel und Pocket ID.

Häufige Fragen

Ist es sicher, ein Token hier einzufügen?

Das Tool dekodiert und prüft vollständig in Ihrem Browser; Token, Secret und Schlüssel werden weder übertragen noch gespeichert. Trotzdem gilt: Ein noch gültiges Token ist ein Zugangsschlüssel. Fügen Sie Produktivtokens grundsätzlich nur in Werkzeuge ein, denen Sie vertrauen, und lassen Sie sie nicht in Tickets oder Chats liegen.

Warum ist mein Token „gültig“, obwohl die Signatur nicht geprüft wurde?

Der Status oben bezieht sich nur auf die Zeitangaben exp und nbf. Ob das Token echt ist, zeigt erst die Signaturprüfung mit dem passenden Secret oder öffentlichen Schlüssel. Ein Token mit gültigen Zeiten, aber falscher Signatur ist wertlos.

Die Signatur ist ungültig – woran kann das liegen?

Meist passt der Schlüssel nicht: ein anderes Secret, ein älterer Schlüssel nach einer Rotation oder ein Secret, das beim Aussteller Base64-kodiert hinterlegt ist. Probieren Sie in diesem Fall den Schalter „Secret ist Base64-kodiert“. Bei ES-Algorithmen muss die Signatur außerdem aus den Werten R und S mit fester Länge bestehen; eine DER-kodierte Signatur, wie sie OpenSSL standardmäßig erzeugt, ist in einem JWT nicht gültig.

Kann ich ein abgelaufenes Token verlängern?

Nein. Jede Änderung an der Payload macht die Signatur ungültig. Ein neues Token stellt nur der Aussteller aus, bei OAuth 2.0 typischerweise über ein Refresh Token.

Welche Schlüsselformate versteht das Tool?

Öffentliche Schlüssel als PEM (BEGIN PUBLIC KEY oder BEGIN RSA PUBLIC KEY), X.509-Zertifikate (BEGIN CERTIFICATE), einzelne JWKs und ganze JWK-Sets. Private Schlüssel lehnt es ab – aus einem privaten PEM-Schlüssel erzeugen Sie den öffentlichen mit openssl pkey -in key.pem -pubout.