JWT-Tokens in JavaScript (Node.js)
\n\nJSON Web Token (JWT) ist ein offener Standard (RFC 7519) zur Erstellung von Zugriffstokens basierend auf JSON. JWT wird häufig für die Authentifizierung und den Informationsaustausch zwischen Client und Server in modernen Webanwendungen auf Node.js verwendet. In diesem Artikel werden wir erläutern, wie man mit JWT in der Node.js-Umgebung mit der beliebten Bibliothek jsonwebtoken arbeitet.
Was ist JWT?
\n\nJWT besteht aus drei Teilen, die durch Punkte getrennt sind:
\n\n- \n
- Header — der Header, der den Tokentyp und den Signaturalgorithmus (z. B. HS256 oder RS256) enthält. \n
- Payload — die Nutzlast, in der die Daten (Claims) gespeichert sind: Benutzer-ID, Rolle, Lebensdauer des Tokens usw. \n
- Signature — die Signatur, die auf Basis von Header, Payload und einem geheimen Schlüssel erstellt wird. Die Signatur stellt sicher, dass das Token nicht verändert wurde. \n
Visuell sieht JWT so aus: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
Installation der Bibliothek jsonwebtoken
\n\nFür die Arbeit mit JWT in Node.js wird das Paket jsonwebtoken verwendet. Installieren Sie es über npm:
npm install jsonwebtoken\n\nNach der Installation können Sie die Bibliothek in Ihr Projekt importieren:
\n\nconst jwt = require('jsonwebtoken');\n\nGenerierung (Signierung) eines JWT-Tokens
\n\nZum Erstellen eines Tokens verwenden Sie die Methode jwt.sign(). Sie akzeptiert drei Hauptparameter:
- \n
- payload — ein Objekt mit den Daten, die im Token kodiert werden sollen. \n
- secretOrPrivateKey — der geheime Schlüssel (oder private Schlüssel für RSA/ECDSA-Algorithmen). \n
- options — ein Objekt mit Optionen, z. B.
expiresInzur Angabe der Lebensdauer des Tokens. \n
Beispiel zur Generierung eines Tokens:
\n\nconst jwt = require('jsonwebtoken');\n\nconst payload = {\n userId: 12345,\n role: 'user'\n};\n\nconst secretKey = 'your-secret-key-here';\n\nconst token = jwt.sign(payload, secretKey, { expiresIn: '1h' });\n\nconsole.log('Generierter JWT:', token);\n\nIn diesem Beispiel ist das Token 1 Stunde lang gültig. Sie können die Zeit auch in Sekunden angeben (expiresIn: 3600) oder in anderen Formaten, z. B. '7d' (7 Tage) oder '30m' (30 Minuten).
Überprüfung (Verifikation) eines JWT-Tokens
\n\nZur Überprüfung der Authentizität eines Tokens wird die Methode jwt.verify() verwendet. Sie gibt den dekodierten Payload zurück, wenn das Token gültig ist, oder wirft einen Fehler, wenn das Token abgelaufen oder die Signatur ungültig ist.
const jwt = require('jsonwebtoken');\n\nconst token = 'eyJhbGciOiJIUzI1NiIs...'; // Ihr Token\nconst secretKey = 'your-secret-key-here';\n\ntry {\n const decoded = jwt.verify(token, secretKey);\n console.log('Dekodierte Daten:', decoded);\n} catch (err) {\n console.error('Verifikationsfehler:', err.message);\n}\n\nWenn das Token abgelaufen ist, erhalten Sie den Fehler 'jwt expired'. Wenn die Signatur ungültig ist — 'invalid signature'.
Dekodierung ohne Signaturprüfung
\n\nManchmal müssen Sie nur die Daten aus dem Token lesen, ohne die Signatur zu überprüfen (z. B. zum Debuggen). Verwenden Sie dazu jwt.decode():
const jwt = require('jsonwebtoken');\n\nconst token = 'eyJhbGciOiJIUzI1NiIs...';\nconst decoded = jwt.decode(token);\n\nconsole.log('Payload ohne Prüfung:', decoded);\n\nWichtig: jwt.decode() überprüft die Signatur nicht, verwenden Sie es daher nicht zur Authentifizierung in der Produktion.
Middleware für Express mit JWT
\n\nIn Webanwendungen mit Express wird JWT häufig zum Schutz von Routen verwendet. Erstellen wir eine einfache Middleware, die das Token aus dem Header <
Auch in der Bibliothek
Konfiguration von Go-Anwendungen (Golang): Bibliotheken und Werkzeuge
Arbeiten mit Bildern in PHP: Die Bibliotheken GD und Imagick
CLI-Frameworks für Go (Golang): vollständiger Überblick und Vergleich
Faker für PHP: Komplette Anleitung mit Beispielen