
JWT erstellen und dekodieren: Token online bauen und prüfen
Header und Payload eines JWT dekodieren oder ein Test-Token signieren, direkt im Browser: HS256, RS256, ES256, ohne Secret an einen Drittserver zu senden.
Ein JWT kann jeder lesen: dekodieren zum Prüfen, signieren zum Testen, verifizieren zum Vertrauen
Ein JSON Web Token wirkt undurchsichtig, doch seine ersten beiden Segmente sind gewöhnliches JSON in Base64URL: Wer das Token besitzt, kann es lesen. Genau das brauchen Sie, wenn eine API 401 antwortet und Sie wissen wollen, was das Token behauptet. Der JWT-Decoder online von FastMinify dekodiert Header und Payload, sobald Sie das Token einfügen, und der JWT-Encoder signiert ein Token aus bearbeitbarem Header- und Payload-JSON, live und ohne Absenden-Schaltfläche. Beide laufen in Ihrem Browser: Token, Claims und Secret werden nirgendwohin gesendet. Dekodieren ist jedoch nicht Verifizieren. Jeder kann "role": "admin" in eine Payload schreiben, deshalb beweist ein dekodiertes Token nichts über seinen Aussteller. Eine Signatur gegen die öffentlichen Schlüssel eines Ausstellers, die Zielgruppe (aud), den Aussteller (iss) und den Ablauf zu prüfen, ist die Aufgabe von jwt-verify, das ein eingefügtes JWKS entgegennimmt; inspect-jwks zeigt, was in einem solchen Schlüsselsatz steckt. Dieser Leitfaden erklärt den Aufbau eines JWT, wie Sie einen 401 oder 403 mit einem dekodierten Token debuggen, welche Fehler aus einem Testwerkzeug eine Sicherheitslücke machen und wie dieselben Operationen in Node mit der Bibliothek jose aussehen. Die Werkzeuge liegen im Hub für Sicherheits-Tools.
Kodieren, dekodieren oder verifizieren: Welches Werkzeug beantwortet welche Frage
Decoder und Encoder decken alles ab, was kein Vertrauen in einen Aussteller herstellen muss.
Einem Token zu vertrauen braucht Schlüssel, Claims und eine Richtlinie, nicht nur eine lesbare Payload. Übergeben Sie an jwt-verify, inspect-jwks oder an Ihren eigenen Code.
Einen 401 oder 403 mit einem dekodierten Token debuggen
Fügen Sie das Token in den Decoder ein und lesen Sie die Zeit-Claims, bevor Sie die API anfassen. exp, nbf und iat sind NumericDate-Werte: Sekunden seit dem 1. Januar 1970 UTC (RFC 7519).
Stimmen die Claims und die API lehnt trotzdem ab, liegt das Problem im Header oder in der Signatur.
Ein 403 heißt, das Token wurde akzeptiert und die Autorisierung hat Nein gesagt. Die Payload verrät meist, warum.
Vier Fehler, die aus einem Testwerkzeug eine Sicherheitslücke machen
Ein Decoder zeigt, was ein Token behauptet, nicht, wer es geschrieben hat. Die Payload ist nicht geschützt: Wer das Token hat oder eines bauen kann, kann jeden beliebigen Claim hineinschreiben. Der Encoder kann sogar ein ungesichertes Token mit alg=none erzeugen, dessen Signatursegment leer ist: Die Werkzeuge kennzeichnen es als „Unsigniertes JWT (alg=none)“, und kein Verifizierer sollte es je akzeptieren. RFC 8725 (Best Current Practices für JWT) verlangt von Servern, nur erwartete Algorithmen zu akzeptieren und nie das Token wählen zu lassen. Algorithm Confusion ist der klassische Fehler: Ein Token, das HS256 angibt und mit dem öffentlichen Schlüssel eines RS256-Dienstes signiert ist, passiert einen Verifizierer, der alg aus dem Header liest und den öffentlichen Schlüssel als HMAC-Secret benutzt.
Base64URL ist eine Kodierung, keine Verschlüsselung: Der Base64-Leitfaden erklärt den Unterschied. Ein signiertes JWT (JWS) garantiert nur Integrität, die gesamte Payload ist also lesbar. Verschlüsselte Tokens gibt es (JWE, RFC 7516, fünf statt drei Teile), doch der Decoder hier verarbeitet nur signierte Tokens. Ein Token ist außerdem ein Zugangsnachweis: Wer es besitzt, kann es bis exp verwenden. Dieses Werkzeug behält es in Ihrem Tab, aber eine Bildschirmfreigabe, ein geteilter Screenshot oder ein Ticket mit eingefügtem Token geben es trotzdem preis.
HS256 signiert mit einem gemeinsamen Secret, und RFC 7518 verlangt einen Schlüssel, der mindestens so lang ist wie die Hash-Ausgabe: 256 Bit für HS256, 384 für HS384, 512 für HS512. Ist Ihr Secret kürzer, zeigt der Encoder seine Bitzahl im Vergleich zum empfohlenen Minimum an. Diese Zahl ist die Schlüssellänge, nicht seine Zufälligkeit: Ein deutscher Satz mit 32 Zeichen ist 256 Bit lang und trotzdem erratbar. Wer ein einziges Token besitzt, kann Kandidaten-Secrets offline gegen dessen Signatur testen, ohne Ihre API je zu berühren. Ziehen Sie das Secret zufällig, zum Beispiel mit dem Passwort-Generator (siehe den Passwort-Leitfaden): Etwa 41 Zeichen aus seinem Standardzeichensatz mit 82 Zeichen tragen 256 Bit Entropie. Die Base64URL-Option ändert die verwendeten Bytes: Angekreuzt wird die Secret-Zeichenkette als Base64URL dekodiert und ihre Bytes sind der Schlüssel; nicht angekreuzt sind die Zeichen selbst der Schlüssel. Derselbe Text mit der falschen Einstellung ergibt eine andere Signatur.
Der Encoder ist für Fixtures und Debugging gebaut. Er setzt iat auf jetzt, kann die Signatur ganz weglassen, und die geladenen Beispiele nutzen Wegwerf-Secrets. Ein hier mit einem Demo-Secret signiertes Token darf in einer echten Umgebung nie akzeptiert werden, und ein echtes Signatur-Secret darf nie in eine Datei geraten, die Sie danach committen. Ist es schon passiert, tauschen Sie es aus und scannen Sie Ihren Diff vor dem Commit mit dem Secrets-Scanner.
Aufbau eines JWT: drei Base64URL-Segmente und was jedes sagt
Die kompakte Form besteht aus drei Base64URL-Segmenten, verbunden durch Punkte. So reist ein JWT in einem Authorization: Bearer-Header.
Sieben registrierte Claims (RFC 7519) decken die meisten Debugging-Sitzungen ab. Alle sind in der Spezifikation optional, eine API darf also mehr verlangen als der Standard.
Der Wert von alg entscheidet, wer ein Token ausstellen und wer es nur prüfen kann.
Dekodieren und kodieren in den Werkzeugen: die Anleitung
Der JWT-Decoder hat keine Schaltfläche: Das Dekodieren läuft beim Einfügen oder Bearbeiten nach einer kurzen Pause. Der Editor startet leer; „Beispiel laden“ oder die Wahl eines Algorithmus lädt ein Demo-Token.
Das kompakte Token einfügen
Nur die drei Segmente, ohne das Präfix Bearer . Leerzeichen am Anfang und Ende werden ignoriert.
Header und Payload lesen
Beide erscheinen als formatiertes JSON in einem eigenen Bereich, neben der rohen Signatur. Prüfen Sie zuerst alg, kid, exp, aud und iss.
Optional die Signatur prüfen
Fügen Sie das HMAC-Secret ein oder bei asymmetrischen Algorithmen einen öffentlichen Schlüssel als PEM oder JWK. Das Ergebnis lautet „Signatur verifiziert“ oder „Signatur ungültig“ und betrifft nur die Signatur.
Einen Fehler lesen, falls es einen gibt
Der Decoder meldet eine falsche Teilezahl, ein leeres Segment, eine fehlende Signatur (nur bei alg=none erlaubt) oder ein Segment, das kein Base64URL-JSON ist.
Der JWT-Encoder signiert beim Tippen. Das Token erscheint, sobald Header, Payload und Schlüssel gültig sind.
Den Algorithmus wählen
Nutzen Sie die Werkzeugleiste oder ändern Sie alg im Header-JSON. Ein fehlender oder nicht unterstützter alg wird als ungültiger Header gemeldet.
Die Claims schreiben
Ein JSON-Objekt. iat wird bei jedem Kodieren mit der aktuellen Zeit überschrieben, ein altes iat lässt sich also nicht festschreiben.
Bei Bedarf einen Ablauf setzen
Das Menü Ablauf (15 Minuten, 1 Stunde, 24 Stunden) überschreibt jedes exp im JSON. „Keins“ lässt Ihre Payload unverändert.
Den Schlüssel angeben
Ein Secret für HMAC oder einen privaten Schlüssel als PEM (PKCS#8) oder JWK für RSA, ECDSA und EdDSA. Ein Secret unter der empfohlenen Länge zeigt eine Warnung mit seiner Größe in Bit.
Das Token kopieren und prüfen
Fügen Sie es in den Decoder ein, um zu sehen, was Sie erzeugt haben, danach in jwt-verify, um eine echte Verifizierungsrichtlinie zu testen.
Einige Grenzen, die Sie kennen sollten, bevor Sie sich für einen bestimmten Zweck darauf verlassen.
Dieselben Operationen in Ihrem eigenen Code
Das Dekodieren braucht keine Bibliothek: an den Punkten teilen und jedes Segment als Base64URL lesen. Genau das macht der Decoder, mit derselben Grenze: Nichts wird geprüft.
Einfaches Beispiel
Die Bibliothek jose signiert ein kompaktes JWT und setzt die registrierten Claims für Sie. Anders als der Encoder hier nutzt setIssuedAt() die echte Uhr, wie es in der Produktion sein soll.
Einfaches Beispiel
Bei der Verifizierung entsteht Vertrauen: Legen Sie Algorithmus, Aussteller und Zielgruppe fest und erlauben Sie eine kleine Zeittoleranz.
Einfaches Beispiel
Nichts zu installieren, nichts gesendet: Decoder und Encoder decken das Lesen von Claims, das Bauen von Fixtures und das Prüfen einer Signatur ab, für die Sie den Schlüssel besitzen. Die Kompromisse: keine Claim-Validierung, keine Zeitstempel-Umrechnung, kein JWE, EdDSA auf Ed25519 beschränkt. Für eine echte Vertrauensentscheidung nutzen Sie eine Verifizierungsbibliothek auf dem Server oder fügen ein JWKS in jwt-verify ein, um Ihre Richtlinie vorab zu testen.
Fazit
Ein JWT ist ein signierter, kein versiegelter Umschlag: Seine Payload kann jeder lesen, und nur die Signatur zeigt, dass es nicht verändert wurde. Der JWT-Decoder macht die Claims in Sekunden sichtbar, was für das Meiste bei einem 401 oder 403 genügt, und der JWT-Encoder baut ein Token, um einen Fall nachzustellen. Keiner von beiden stellt Vertrauen her. Dafür braucht es die Schlüssel des Ausstellers, einen festgelegten Algorithmus und Prüfungen von aud, iss und exp, wie sie jwt-verify und Ihr eigener Servercode leisten. Halten Sie Test-Secrets aus der Produktion fern, ziehen Sie HMAC-Secrets zufällig und lehnen Sie alg=none ab. Der Hub für Sicherheits-Tools bündelt die Nachbarwerkzeuge für Schlüssel, Zertifikate und Secrets.
Verwandte Artikel

Länge, Entropie, Sonderzeichen: Erzeugen Sie ein starkes Passwort im Browser mit Web Crypto — und wissen Sie, was das Werkzeug nicht garantiert.

Testen Sie eine JavaScript-Regex, prüfen Sie Capture-Gruppen und sehen Sie ein $1-Replace im Browser, bevor das Muster in Produktion landet.

Zufälliger UUID v4, sortierbare UUID v7 und ULID, kompakter Nanoid: Vergleich und Online-Generatoren für Primärschlüssel und öffentliche IDs.