JsonWebToken für JavaScript (Node.js): Komplettguide mit Beispielen
Was ist JsonWebToken und wofür wird es benötigt?
Die Bibliothek JsonWebToken (oft als jsonwebtoken oder jwt verwendet) ist eine der beliebtesten Bibliotheken für die Arbeit mit JSON Web Tokens (JWT) in der Node.js-Umgebung. JWT ist eine kompakte und eigenständige Methode zur Übertragung von Informationen zwischen Parteien als JSON-Objekt. Diese Informationen können überprüft werden und sind vertrauenswürdig, da sie digital signiert sind. JWTs können entweder mit einem geheimen Schlüssel (HMAC-Algorithmus) oder einem öffentlichen/privaten Schlüsselpaar (RSA- oder ECDSA-Algorithmen) signiert werden.
Der Hauptzweck der Bibliothek ist die Implementierung von Autorisierungs- und Authentifizierungsmechanismen in Webanwendungen und APIs. Wenn sich ein Benutzer erfolgreich anmeldet, erstellt der Server einen JWT und sendet ihn an den Client. Der Client sendet dieses Token dann bei jeder nachfolgenden Anfrage mit, sodass der Server die Identität des Benutzers überprüfen kann, ohne Sitzungsdaten auf dem Server speichern zu müssen. Dies macht JWT zur idealen Lösung für RESTful APIs, Microservice-Architekturen und Single-Page-Anwendungen (SPAs).
Die Bibliothek jsonwebtoken bietet ein vollständiges Toolkit zum Erstellen (sign), Überprüfen (verify) und Dekodieren (decode) von Tokens. Sie unterstützt alle gängigen Signaturalgorithmen, darunter HS256, RS256 und ES256, und ermöglicht eine flexible Konfiguration der Token-Lebensdauer, das Hinzufügen benutzerdefinierter Felder (Claims) sowie die Arbeit mit öffentlichen/privaten Schlüsseln. Aufgrund ihrer Zuverlässigkeit und Einfachheit wird diese Bibliothek in tausenden Projekten weltweit eingesetzt und gilt als De-facto-Standard für die JWT-Arbeit im Node.js-Ökosystem.
Installation
Führen Sie den folgenden Befehl im Terminal aus, um die JsonWebToken-Bibliothek in Ihr Node.js-Projekt zu installieren:
npm install jsonwebtoken
Wenn Sie Yarn verwenden:
yarn add jsonwebtoken
Nach der Installation können Sie die Bibliothek in Ihren Code importieren:
const jwt = require('jsonwebtoken');
// oder für ES-Module:
// import jwt from 'jsonwebtoken';
Schnellstart – Minimales funktionierendes Beispiel
Lassen Sie uns ein einfaches Beispiel erstellen, das die Erstellung und Überprüfung eines JWT-Tokens demonstriert:
const jwt = require('jsonwebtoken');
// Geheimer Schlüssel (in einem echten Projekt in der .env-Datei speichern)
const secretKey = 'mein-super-geheimer-schluessel-123';
// Daten, die wir im Token kodieren möchten (Payload)
const payload = {
userId: 12345,
username: 'max_mustermann',
role: 'user'
};
// 1. TOKEN ERSTELLEN
const token = jwt.sign(payload, secretKey, { expiresIn: '1h' });
console.log('Erstelltes Token:', token);
// 2. TOKEN ÜBERPRÜFEN
try {
const decoded = jwt.verify(token, secretKey);
console.log('Dekodierte Daten:', decoded);
// Ausgabe: { userId: 12345, username: 'max_mustermann', role: 'user', iat: ..., exp: ... }
} catch (err) {
console.error('Fehler bei der Token-Überprüfung:', err.message);
}
// 3. DEKODIEREN OHNE SIGNATURPRÜFUNG (NICHT EMPFOHLEN für Autorisierung!)
const decodedWithoutVerify = jwt.decode(token);
console.log('Ohne Prüfung dekodiert:', decodedWithoutVerify);
Dieses Beispiel zeigt die drei grundlegenden Operationen: Erstellen eines Tokens mit sign(), Überprüfen seiner Authentizität mit verify() und einfaches Dekodieren ohne Signaturprüfung mit decode().
Wichtige Methoden/Funktionen/Klassen
1. jwt.sign(payload, secretOrPrivateKey, [options, callback])
Signatur: jwt.sign(payload: Object|Buffer, secretOrPrivateKey: string|Buffer, options?: Object, callback?: Function) => string|void
Funktion: Erstellt (signiert) ein JWT-Token. Akzeptiert einen Payload (Daten), einen geheimen Schlüssel und optionale