Autorisierung und Authentifizierung in JavaScript (Node.js)
In der modernen Webentwicklung mit Node.js sind die Sicherheit von Benutzerdaten und die Zugriffskontrolle kritische Aufgaben. Authentifizierung (Überprüfung der Identität) und Autorisierung (Überprüfung der Berechtigungen) sind zwei Säulen jedes geschützten Systems. In diesem Artikel werden wir die wichtigsten Werkzeuge und Bibliotheken zur Implementierung dieser Mechanismen auf der Node.js-Plattform besprechen.
Grundlegende Konzepte
Authentifizierung ist der Prozess der Überprüfung, ob ein Benutzer der ist, der er vorgibt zu sein (normalerweise durch Login/Passwort, Tokens oder Biometrie). Autorisierung ist die Bestimmung, welche Aktionen und Ressourcen einem authentifizierten Benutzer zur Verfügung stehen (Rollen, Zugriffsrechte).
Beliebte Bibliotheken für Node.js
1. Passport.js – Universelle Authentifizierungsstrategie
Passport.js ist die beliebteste Middleware-Bibliothek für Express. Sie unterstützt über 500 Strategien: lokal (Login/Passwort), OAuth2 (Google, Facebook, GitHub), JWT und viele andere.
const passport = require('passport');const LocalStrategy = require('passport-local').Strategy;
passport.use(new LocalStrategy( function(username, password, done) { User.findOne({ username: username }, function (err, user) { if (err) { return done(err); } if (!user) { return done(null, false, { message: 'Ungültiger Benutzername' }); } if (!user.validPassword(password)) { return done(null, false, { message: 'Ungültiges Passwort' }); } return done(null, user); }); }));
// Serialisierung und Deserialisierung des Benutzerspassport.serializeUser(function(user, done) { done(null, user.id);});
passport.deserializeUser(function(id, done) { User.findById(id, function(err, user) { done(err, user); });});2. JSON Web Tokens (JWT) – Sitzungslose Authentifizierung
Die Bibliothek jsonwebtoken ermöglicht das Erstellen und Verifizieren von JWT-Tokens. Dies ist ideal für REST-APIs und SPA-Anwendungen.
const jwt = require('jsonwebtoken');const secretKey = process.env.JWT_SECRET;
// Token bei der Anmeldung erstellenconst token = jwt.sign( { userId: user.id, role: user.role }, secretKey, { expiresIn: '24h' });
// Middleware zur Token-Überprüfungfunction authMiddleware(req, res, next) { const authHeader = req.headers['authorization']; const token = authHeader && authHeader.split(' ')[1]; // Bearer TOKEN
if (!token) return res.status(401).json({ error: 'Token nicht bereitgestellt' });
jwt.verify(token, secretKey, (err, decoded) => { if (err) return res.status(403).json({ error: 'Ungültiger Token' }); req.user = decoded; next(); });}3. bcrypt – Sicheres Hashing von Passwörtern
Speichern Sie Passwörter niemals im Klartext! bcrypt ist der Goldstandard für Hashing mit Salt.
const bcrypt = require('bcrypt');const saltRounds = 10;
// Passwort bei der Registrierung hashenasync function hashPassword(plainPassword) { const salt = await bcrypt.genSalt(saltRounds); const hash = await bcrypt.hash(plainPassword, salt); return hash;}
// Passwort bei der Anmeldung überprüfenasync function checkPassword(plainPassword, hash) { return await bcrypt.compare(plainPassword, hash);}4. express-session + connect-redis – Sitzungsverwaltung
Für traditionelle Webanwendungen mit serverseitigen Sitzungen verwenden Sie express-session in Kombination mit Redis zur Skalierung.
const session = require('express-session');const RedisStore = require('connect-redis')(session);
app.use(session({ store: new RedisStore({ client: redisClient }), secret: process.env.SESSION_SECRET, resave: false, saveUninitialized: false, cookie: { secure: process.env.NODE_ENV === 'production', // HTTPS httpOnly: true, maxAge: 24 * 60 * 60 * 1000 // 1 Tag }})) Auch in der Bibliothek
Arbeiten mit Apache Kafka in C# (.NET): Die Bibliothek Confluent.Kafka
Caching in Go (Golang): Redis, Gruppen- und In-Memory-Caching
Navigation Component für Kotlin: Komplettguide mit Beispielen
Arbeiten mit YAML in C++: Die Bibliothek yaml-cpp für Parsing und Serialisierung