Glossar · API-Testing
JWT (JSON Web Token)
Englisch: JWT
Auch genannt: JWTs, JSON Web Token, JSON Web Tokens, JWT-Token
Definition
Ein JSON Web Token ist ein kompaktes, signiertes Token der Form header.payload.signature, das Claims wie Nutzer-ID, Ablaufzeit und Audience enthält.
Ein JSON Web Token (JWT, oft „dschott“ ausgesprochen) ist ein String aus drei Base64url-kodierten, durch Punkte getrennten Teilen: einem Header, der angibt, wie signiert wurde, einer Payload mit Claims und einer Signatur. APIs erhalten es meist im Header Authorization: Bearer <token> und verifizieren die Signatur, um den Claims ohne Datenbankabfrage zu vertrauen. Viele OAuth-2.0- und OpenID-Connect-Provider stellen Access Tokens und ID Tokens als JWTs aus.
Beispiel
Eine dekodierte Payload:
{
"iss": "https://auth.example.com",
"sub": "user_7f3a",
"aud": "orders-api",
"role": "member",
"iat": 1767225600,
"exp": 1767229200
}
iss ist der Aussteller (Issuer), sub das Subjekt (meist der Nutzer), aud der vorgesehene Empfänger und iat/exp Ausstellungs- und Ablaufzeitpunkt in Sekunden seit der Unix-Epoche. Um die Payload in Node 22 zu lesen, brauchen Sie keine Bibliothek:
const [, payload] = token.split('.');
const claims = JSON.parse(Buffer.from(payload, 'base64url').toString('utf8'));
Kodiert, nicht verschlüsselt
Ein normales signiertes JWT (ein JWS) ist kodiert, nicht verschlüsselt. Wer das Token hat, kann jeden Claim lesen, wie das Snippet oben zeigt. Die Signatur beweist nur, dass das Token von jemandem mit dem Schlüssel ausgestellt und nicht verändert wurde. Legen Sie daher niemals Geheimnisse oder personenbezogene Daten in eine JWT-Payload, es sei denn, das Token ist tatsächlich verschlüsselt (ein JWE, ein separates und weniger verbreitetes Format). Ein Token zu dekodieren ist nicht dasselbe, wie es zu validieren: Ein Test, der ein Token dekodiert, hat nichts über dessen Echtheit geprüft.
Was getestet werden sollte
- Abgelaufenes Token:
expin die Vergangenheit setzen oder abwarten und401erwarten. - Manipulierte Payload:
roleaufadminändern, die alte Signatur behalten und401erwarten. Wird das Token akzeptiert, verifiziert der Server keine Signaturen. alg: none: Ein Token ohne Signatur muss abgelehnt werden.- Falsche Audience oder falscher Issuer: Ein gültiges Token für eine andere API darf hier nicht funktionieren.
- Gültiges Token, falsche Berechtigungen:
403erwarten, nicht401, weil der Nutzer authentifiziert, aber nicht autorisiert ist. - Logout und Widerruf: JWTs sind meist bis zu ihrem Ablauf gültig. Prüfen Sie also, was das System nach einem Logout oder einer Passwortänderung tut. Kurze Ablaufzeiten plus Refresh Tokens sind die übliche Gegenmaßnahme.