Was ist ein JWT?
Ein JWT (JSON Web Token) ist ein kompakter, URL-sicherer String, der Claims zwischen zwei Parteien darstellt. Er besteht aus drei Base64URL-kodierten Abschnitten, getrennt durch Punkte: einem Header, einer Payload und einer Signatur. Die Signatur erlaubt es dem Empfänger zu verifizieren, dass die Inhalte nicht manipuliert wurden.
Die drei Teile
Header – gibt den Algorithmus an, mit dem der Token signiert wurde, sowie den Token-Typ.
Payload – enthält Claims: Fakten über den Nutzer und die Session, etwa Nutzer-ID, Rollen und Ablaufzeit.
Signatur – ein kryptografischer Hash aus Header und Payload, der beweist, dass der Token nicht verändert wurde.
Häufige Claims
Die Payload enthält typischerweise: sub (das Subjekt – meist eine Nutzer-ID), iat (ausgestellt um), exp (Ablauf-Zeitstempel), iss (Aussteller) und aud (vorgesehene Zielgruppe).
Decodieren vs. Verifizieren
Jeder kann ein JWT decodieren – die Payload ist nur kodiert, nicht verschlüsselt. Nutze unseren JWT-Decoder, um Header und Payload jedes Tokens während der Entwicklung zu inspizieren. Die Verifizierung (Prüfung der Signatur) erfordert den geheimen Schlüssel und geschieht auf deinem Server.
Häufige Sicherheitsfehler, die du vermeiden solltest
- Akzeptiere niemals Tokens mit
"alg": "none"– das deaktiviert die Signaturprüfung vollständig - Speichere Tokens in httpOnly-Cookies, nicht im localStorage des Browsers (der anfällig für Cross-Site-Scripting ist)
- Validiere immer den
exp-Claim – abgelaufene Tokens sollten abgelehnt werden - Lege niemals Passwörter oder sensible personenbezogene Daten in die Payload – sie kann von jedem gelesen werden, der den Token hat
Häufige Fragen
- Wie inspiziere ich ein JWT, ohne Code zu schreiben?
- Füge den Token in unseren JWT-Decoder ein. Er teilt den Token in seine drei Abschnitte, decodiert jeden und zeigt die komplette Payload inklusive aller Claims und der Ablaufzeit.
- Ist die JWT-Payload verschlüsselt?
- Nein – die Payload ist Base64URL-kodiert, was jeder decodieren kann. Speichere niemals Passwörter, Kreditkartennummern oder andere sensible Daten in einer JWT-Payload.
- Was ist der Unterschied zwischen einem JWT und einem API-Schlüssel?
- Ein API-Schlüssel ist ein opaker String – der Server muss ihn in einer Datenbank nachschlagen, um zu wissen, welche Berechtigungen er gewährt. Ein JWT ist eigenständig – der Server kann ihn verifizieren und die Berechtigungen aus der Payload lesen, ohne Datenbankabfrage.