Was ist ein JSON Web Token?
Ein JSON Web Token (JWT) ist eine kompakte, URL-sichere Hülle für eine kleine Claims-Nutzlast. Es ist das Standard-Credential-Format für zustandslose Web-Sitzungen, OAuth/OIDC-ID-Tokens, Machine-to-Machine-API-Authentifizierung und signierte Magic Links. Ein JWT besteht immer aus drei base64url-Segmenten, die durch Punkte verbunden sind: header.payload.signature. Header und Payload sind JSON; die Signatur ist ein binärer MAC oder eine digitale Signatur über die ersten beiden Segmente.
Wie funktionieren JWTs?
Wenn dieses Tool ein Token dekodiert, geht es denselben dreistufigen Weg wie jede JWT-Bibliothek:
- Das Token an den Punkten in genau drei nicht-leere Segmente aufteilen. Jede andere Form ist fehlerhaft.
- Die Segmente 0 und 1 base64url-dekodieren und anschließend mit
JSON.parseauswerten. Der Header trägt den Algorithmus (alg) und den Token-Typ (typ). Das Payload trägt die Claims (sub,exp,iat, eigene Schlüssel). - Wenn ein Geheimnis bereitgestellt wird, den MAC über
<segment0>.<segment1>mit dem im Header angegebenen Algorithmus neu berechnen. Die Bytes mit dem dritten Segment vergleichen. - Das Verifizierungsergebnis zusammen mit den dekodierten Claims anzeigen, einschließlich einer menschenlesbaren Ablaufanzeige, die aus dem
exp-Claim berechnet wird.
Warum JWTs im Browser dekodieren?
Ein echtes, in Verwendung befindliches JWT in einen entfernten Debugger einzufügen, gibt das Credential an die Logs dieses Dienstes, dessen Observability-Stack und jeden Partner weiter, an den der Dienst Daten liefert. Selbst wenn die Drittanbieter-Seite behauptet, keine Tokens zu loggen, hast du keine Möglichkeit, das zu überprüfen. Dieses Tool wurde gebaut, damit du diesen Kompromiss niemals eingehen musst:
- Kein Netzwerk: Die Laufzeit hat keine
fetch-,XMLHttpRequest- odersendBeacon-Aufrufe. Öffne die DevTools, während du dekodierst und verifizierst — der Netzwerk-Tab bleibt still. - Natives Web Crypto: Die HMAC-Verifizierung verwendet
crypto.subtle.importKeyundcrypto.subtle.sign, dieselben Primitive, die auch deine Laufzeitumgebung aufrufen würde. - Statisches Deployment: Jede Seite ist eine einzelne statische HTML-Datei ohne Server-Endpunkt, der kompromittiert werden könnte. Es gibt kein Token, das geleakt werden kann, weil es keinen Server gibt, an den es geleakt werden könnte.
Was verifiziert dieses Tool, und was nicht?
Version 1 dieses Tools verifiziert ausschließlich HMAC-SHA-Familien-Signaturen. Konkret:
- Unterstützt: HS256, HS384, HS512. Stelle das gemeinsame Geheimnis bereit und das Tool berechnet den MAC neu und vergleicht ihn.
- Noch nicht unterstützt: RS256/384/512 (RSA), ES256/384/512 (ECDSA), EdDSA und PS256/384/512 (RSA-PSS). Diese erfordern einen öffentlichen Schlüssel im PEM- oder JWK-Format und sind bewusst auf eine spätere Version verschoben.
- Abgelehnt:
alg: "none". Das Tool dekodiert das Token, kennzeichnet es aber ausdrücklich als unsicher — es findet keine Signaturvalidierung statt, und jedes Produktivsystem, das ein solches Token akzeptiert, hat eine ernsthafte Schwachstelle.
Wie sieht ein Beispiel für JWT-Dekodierung aus?
Füge das kanonische RFC 7519-Beispiel-Token oben in das Eingabefeld ein:
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
Der Header dekodiert sich zu {"alg":"HS256","typ":"JWT"} und das Payload zu {"sub":"1234567890","name":"John Doe","iat":1516239022}. Gib your-256-bit-secret im Verifizierungspanel ein, und die Signaturprüfung liefert gültig. Ändere ein einziges Zeichen des Geheimnisses und sie liefert ungültig. Nichts davon verlässt deinen Browser.
Dies ist der JWT-Dekodierer, den wir uns gewünscht hätten, als wir ein Token in Produktion debuggen mussten: datenschutzfreundlich, schnell und auf denselben Primitiven aufgebaut, die auch die Laufzeitumgebung verwendet.