JWT-Tokens in JavaScript (Node.js): Vollständiger Leitfaden

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

JWT-Tokens in JavaScript (Node.js)

\n\n

JSON 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.

\n\n

Was ist JWT?

\n\n

JWT 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
\n\n

Visuell sieht JWT so aus: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c

\n\n

Installation der Bibliothek jsonwebtoken

\n\n

Für die Arbeit mit JWT in Node.js wird das Paket jsonwebtoken verwendet. Installieren Sie es über npm:

\n\n
npm install jsonwebtoken
\n\n

Nach der Installation können Sie die Bibliothek in Ihr Projekt importieren:

\n\n
const jwt = require('jsonwebtoken');
\n\n

Generierung (Signierung) eines JWT-Tokens

\n\n

Zum Erstellen eines Tokens verwenden Sie die Methode jwt.sign(). Sie akzeptiert drei Hauptparameter:

\n\n
    \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. expiresIn zur Angabe der Lebensdauer des Tokens.
  • \n
\n\n

Beispiel zur Generierung eines Tokens:

\n\n
const 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\n

In 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).

\n\n

Überprüfung (Verifikation) eines JWT-Tokens

\n\n

Zur Ü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.

\n\n
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\n

Wenn das Token abgelaufen ist, erhalten Sie den Fehler 'jwt expired'. Wenn die Signatur ungültig ist — 'invalid signature'.

\n\n

Dekodierung ohne Signaturprüfung

\n\n

Manchmal 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():

\n\n
const jwt = require('jsonwebtoken');\n\nconst token = 'eyJhbGciOiJIUzI1NiIs...';\nconst decoded = jwt.decode(token);\n\nconsole.log('Payload ohne Prüfung:', decoded);
\n\n

Wichtig: jwt.decode() überprüft die Signatur nicht, verwenden Sie es daher nicht zur Authentifizierung in der Produktion.

\n\n

Middleware für Express mit JWT

\n\n

In Webanwendungen mit Express wird JWT häufig zum Schutz von Routen verwendet. Erstellen wir eine einfache Middleware, die das Token aus dem Header <

Empfehlungen