Was in einem Token steckt
Ein JWT besteht aus drei durch Punkte getrennten Teilen. Die ersten beiden sind Base64url-kodiertes JSON, das jeder lesen kann; der dritte ist die Signatur.
- Header — der Signaturalgorithmus (
alg) und der Typ (typ). Dienste, die Schlüssel rotieren, führen zusätzlich einkidmit, das auf den verwendeten Schlüssel zeigt. - Payload — die Claims.
subbenennt den Nutzer,issden Aussteller,audden vorgesehenen Empfänger, undexp,iatsowienbftragen Zeitangaben. - Signatur — die beiden ersten Teile, mit einem Schlüssel signiert.
Die Spezifikation legt die Zeit-Claims als ganze Sekunden fest. Ein Token, das dort Millisekunden abgelegt hat, erscheint hier Tausende Jahre in der Zukunft — ein Fehler auf Seiten des Ausstellers.
Dekodieren ist kein Prüfen
Dass sich der Inhalt hier lesen lässt, sagt nichts über die Echtheit des Tokens. Der Payload ist nicht verschlossen, jeder kann ihn umschreiben, und nur wer den Schlüssel hat, merkt, dass die Signatur nicht mehr passt.
Deshalb muss der Server die Signatur bei jeder Anfrage prüfen — und darf dabei dem Feld alg nicht vertrauen. Legen Sie den erwarteten Algorithmus serverseitig fest und weisen Sie jedes Token zurück, das none angibt oder von der Erwartung abweicht. Implementierungen, die dem Header blind folgen, sind der klassische Weg, auf dem unsignierte Tokens durchrutschen.
Keine Geheimnisse in den Payload
Wer das Token hat, liest den Payload — auch mit nichts weiter als den Entwicklerwerkzeugen des Browsers. Stehen dort eine Ausweisnummer, eine interne Verwaltungsnotiz oder Zahlungsdaten, gelten sie als veröffentlicht.
Hinein gehört nur, was der Inhaber ruhig sehen darf: eine Nutzer-ID, Rollennamen, ein Ablaufzeitpunkt. Alles Weitere bleibt auf dem Server und wird bei Bedarf nachgeschlagen.
Bevor Sie ein fremdes Token einfügen
Dieses Werkzeug schickt das Token nirgendwohin. Ein noch gültiges Token ist aber selbst ein Zugangsnachweis: In einen Chat oder ein Ticketsystem eingefügt, kann es jeder Mitlesende verwenden. Ist eines abgeflossen, widerrufen Sie die Sitzung, statt auf den Ablauf zu warten.