JWT-Tokens in JavaScript (Node.js): Vollständiger Leitfaden zur Bibliothek jsonwebtoken
JSON Web Token (JWT) ist ein offener Standard (RFC 7519) zur Erstellung von Zugriffstokens auf Basis von JSON. JWT wird häufig für die Authentifizierung und den Informationsaustausch zwischen Client und Server verwendet. Im Node.js-Ökosystem ist die beliebteste Bibliothek für die Arbeit mit JWT jsonwebtoken. In diesem Artikel werden wir im Detail besprechen, wie man diese Bibliothek installiert, konfiguriert und verwendet, um sichere Webanwendungen zu erstellen.
Was ist JWT und warum wird es benötigt?
JWT ist eine Zeichenkette, die aus drei durch Punkte getrennten Teilen besteht: Header (Kopfzeile), Payload (Nutzlast) und Signature (Signatur). Das Token sieht so aus: xxxxx.yyyyy.zzzzz. Die Hauptvorteile von JWT:
- Sicherheit — das Token wird mit einem geheimen Schlüssel oder einem Schlüsselpaar (RSA/ECDSA) signiert, was seine Integrität garantiert.
- Selbstständigkeit — alle für die Authentifizierung notwendigen Informationen sind im Token selbst enthalten, was die Anzahl der Datenbankabfragen reduziert.
- Plattformunabhängigkeit — JWT funktioniert mit jeder Programmiersprache und Plattform.
- Flexibilität — Sie können beliebige benutzerdefinierte Daten in den Payload aufnehmen (z. B. Benutzer-ID, Rolle).
Installation der Bibliothek jsonwebtoken
Um mit JWT in Node.js zu arbeiten, installieren Sie das Paket jsonwebtoken über npm:
npm install jsonwebtokenNach der Installation binden Sie die Bibliothek in Ihre Datei ein:
const jwt = require('jsonwebtoken');Generierung (Signierung) eines JWT-Tokens
Zur Erstellung eines Tokens wird die Methode jwt.sign(payload, secretOrPrivateKey, options) verwendet. Betrachten wir ein einfaches Beispiel:
const jwt = require('jsonwebtoken');
const payload = { userId: 123, role: 'user'};
const secretKey = 'my_super_secret_key_123';
const token = jwt.sign(payload, secretKey, { expiresIn: '1h', // Token läuft in 1 Stunde ab algorithm: 'HS256' // Signaturalgorithmus (Standard: HS256)});
console.log('Generiertes Token:', token);Wichtig: Speichern Sie den geheimen Schlüssel niemals im Code. Verwenden Sie Umgebungsvariablen (.env-Datei). Installieren Sie dazu das Paket dotenv:
npm install dotenvBeispiel mit Umgebungsvariablen:
require('dotenv').config();const jwt = require('jsonwebtoken');
const token = jwt.sign( { userId: 456 }, process.env.JWT_SECRET, { expiresIn: '7d' });Überprüfung (Verifizierung) eines JWT-Tokens
Zur Überprüfung der Authentizität eines Tokens wird die Methode jwt.verify(token, secretOrPublicKey, options) verwendet. Sie gibt den Payload zurück, wenn das Token gültig ist, oder wirft einen Fehler, wenn das Token abgelaufen oder ungültig ist.
const token = 'ihr_token_hier';
try { const decoded = jwt.verify(token, process.env.JWT_SECRET); console.log('Dekodierte Daten:', decoded); // { userId: 456, iat: 1700000000, exp: 1700600000 }} catch (err) { if (err.name === 'TokenExpiredError') { console.log('Token ist abgelaufen'); } else if (err.name === 'JsonWebTokenError') { console.log('Ungültiges Token'); } else { console.log('Verifizierungsfehler:', err.message); }}Beachten Sie die Felder iat (issued at – Erstellungszeit) und exp (expiration time – Ablaufzeit), die automatisch hinzugefügt werden, wenn der Parameter expiresIn angegeben ist.
Middleware für Express.js
In realen Anwendungen wird JWT normalerweise in einer Middleware überprüft. Hier ist ein Beispiel für Express.js:
const express = require('express');const jwt = require('jsonwebtoken');require('dotenv').c