JWT-Token in TypeScript: Vollständige Anleitung mit der Bibliothek jsonwebtoken
\n\nJSON Web Token (JWT) ist ein offener Standard (RFC 7519) zur Erstellung von Zugriffstoken, die auf dem JSON-Format basieren. JWT wird häufig für die Authentifizierung und den Informationsaustausch zwischen Client und Server verwendet. In TypeScript wird die Arbeit mit JWT dank der strengen Typisierung besonders komfortabel und sicher. In diesem Artikel betrachten wir, wie die beliebte Bibliothek jsonwebtoken in TypeScript zum Erstellen, Überprüfen und Verwalten von JWT-Token verwendet wird.
Installation und Einrichtung
\n\nUm zu beginnen, installieren wir die erforderlichen Pakete:
\n\nnpm install jsonwebtoken\nnpm install -D @types/jsonwebtoken\n\nDas erste Paket ist die Bibliothek selbst, das zweite sind die TypeScript-Typen dafür. Nach der Installation erstellen wir eine Datei jwt.service.ts, in der wir die gesamte Logik für die Arbeit mit Token speichern.
Erstellen eines JWT-Tokens
\n\nDie Hauptfunktion von jsonwebtoken ist sign(). Betrachten wir ihre Verwendung mit Typisierung:
import jwt from 'jsonwebtoken';\n\ninterface TokenPayload {\n userId: number;\n email: string;\n role: 'user' | 'admin';\n}\n\nconst createAccessToken = (payload: TokenPayload): string => {\n const secret = process.env.JWT_SECRET || 'default_secret';\n const options: jwt.SignOptions = {\n expiresIn: '15m', // Token ist 15 Minuten gültig\n algorithm: 'HS256',\n };\n\n return jwt.sign(payload, secret, options);\n};\n\nWichtig: Speichern Sie den geheimen Schlüssel niemals im Code. Verwenden Sie Umgebungsvariablen (.env-Datei).
Verifizierung und Dekodierung des Tokens
\n\nZur Überprüfung der Authentizität des Tokens wird die Funktion verify() verwendet. Sie prüft automatisch die Signatur und die Gültigkeitsdauer:
const verifyToken = (token: string): TokenPayload => {\n const secret = process.env.JWT_SECRET || 'default_secret';\n\n try {\n const decoded = jwt.verify(token, secret) as TokenPayload;\n return decoded;\n } catch (error) {\n if (error instanceof jwt.TokenExpiredError) {\n throw new Error('Token abgelaufen');\n }\n if (error instanceof jwt.JsonWebTokenError) {\n throw new Error('Ungültiges Token');\n }\n throw error;\n }\n};\n\nBeachten Sie die Typumwandlung as TokenPayload – dies stellt sicher, dass TypeScript die Struktur der dekodierten Daten kennt.
Refresh-Token: Verlängerung der Sitzung
\n\nIn der Praxis haben Access-Token eine kurze Lebensdauer (15-30 Minuten), daher wird ein Mechanismus zu ihrer Aktualisierung benötigt. Dazu wird ein Refresh-Token mit einer längeren Lebensdauer verwendet:
\n\nconst createRefreshToken = (payload: TokenPayload): string => {\n const secret = process.env.JWT_REFRESH_SECRET || 'refresh_secret';\n const options: jwt.SignOptions = {\n expiresIn: '7d', // eine Woche\n algorithm: 'HS256',\n };\n\n return jwt.sign(payload, secret, options);\n};\n\nconst refreshAccessToken = (refreshToken: string): string => {\n const secret = process.env.JWT_REFRESH_SECRET || 'refresh_secret';\n\n try {\n const decoded = jwt.verify(refreshToken, secret) as TokenPayload;\n // Es kann geprüft werden, ob das Refresh-Token in der Datenbank widerrufen wurde\n return createAccessToken({\n userId: decoded.userId,\n email: decoded.email,\n role: decoded.role,\n });\n } catch {\n throw new Error('Ungültiges Refresh-Token');\n }\n};\n\nMiddleware für Express in TypeScript
\n\nDie Integration von JWT mit Express.js erfordert die Erstellung einer Middleware. Hier ist die typisierte Version:
\n\nimport { Request, Response, NextFunction } from 'express';\n\ninterface AuthRequest extends Request {\n user?: TokenPayload;\n}\n\nconst authMiddleware = (req: AuthRequest, res: Response, next: NextFunction) => {\n const authHeader = req.headers.authorization;\n\n if (!authHeader || !authHeader.startsWith('Bearer ')) {\n return res Auch in der Bibliothek
Redis-Client für Go (Golang): go-redis und redigo – vollständiger Leitfaden
QR-Code-Generierung in Java: Bibliothek ZXing (ausführliche Anleitung)
Swagger/OpenAPI Generierung für C++: Die besten Tools und Bibliotheken