Autorisierung und Authentifizierung in Node.js: JWT, Passport.js, bcrypt

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

Autorisierung und Authentifizierung in Node.js: Vollständiger Leitfaden



In der modernen Webentwicklung ist die Sicherheit von Benutzerdaten die oberste Priorität. In diesem Leitfaden behandeln wir die wichtigsten Tools und Bibliotheken zur Implementierung von Authentifizierung (Überprüfung der Benutzeridentität) und Autorisierung (Überprüfung der Zugriffsrechte) in Node.js-Anwendungen. Sie erfahren, wie Sie Routenschutz einrichten, Passwörter hashen und mit Zugriffstoken arbeiten.



1. Grundlegende Konzepte

  • Authentifizierung — der Prozess der Überprüfung, ob ein Benutzer der ist, der er vorgibt zu sein (normalerweise über Login und Passwort).
  • Autorisierung — die Bestimmung, welche Ressourcen und Aktionen einem authentifizierten Benutzer zur Verfügung stehen.
  • JWT (JSON Web Token) — eine kompakte und eigenständige Methode zur Übertragung von Daten als JSON-Objekt. Wird zur Erstellung von Zugriffstoken verwendet.
  • Sessions — eine traditionelle Methode zur Speicherung von Benutzerdaten auf dem Server (normalerweise mit express-session).


2. Wichtige Bibliotheken für Node.js



2.1. bcrypt — Passwort-Hashing

Speichern Sie Passwörter niemals im Klartext. bcrypt ist eine Bibliothek für sicheres Hashing mit Salt.

const bcrypt = require('bcrypt');const saltRounds = 10;

// Passwort hashenasync function hashPassword(password) { const salt = await bcrypt.genSalt(saltRounds); const hash = await bcrypt.hash(password, salt); return hash;}

// Passwort überprüfenasync function checkPassword(password, hash) { const match = await bcrypt.compare(password, hash); return match; // true oder false}


2.2. jsonwebtoken — Arbeiten mit JWT

Die Bibliothek jsonwebtoken ermöglicht das Erstellen und Überprüfen von JWT-Token. Token bestehen normalerweise aus Header, Payload und Signatur.

const jwt = require('jsonwebtoken');const secretKey = 'Ihr-geheimer-Schlüssel';

// Token erstellenfunction generateToken(userId, role) { const payload = { userId, role }; const token = jwt.sign(payload, secretKey, { expiresIn: '1h' }); return token;}

// Token überprüfen (Middleware)function verifyToken(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ültiges Token' }); req.user = decoded; next(); });}


2.3. Passport.js — Universelle Authentifizierung

Passport.js ist eine Middleware für Express, die über 500 Strategien unterstützt (lokal, OAuth, JWT, Google, Facebook usw.). Beispiel einer lokalen Strategie:

const passport = require('passport');const LocalStrategy = require('passport-local').Strategy;const User = require('./models/User');

passport.use(new LocalStrategy( async (username, password, done) => { try { const user = await User.findOne({ username }); if (!user) return done(null, false, { message: 'Benutzer nicht gefunden' }); const isValid = await bcrypt.compare(password, user.password); if (!isValid) return done(null, false, { message: 'Falsches Passwort' }); return done(null, user); } catch (err) { return done(err); } }));

// Serialisierung und Deserialisierung (für Sessions)passport.serializeUser((user, done) => done(null, user.id));passport.deserializeUser(async (id, done) => { const user = await User.findById(id); done(null, user);});


3. Vollständiges Beispiel: Registrierung und Login

Fügen wir alles in einer einfachen Express-Anwendung zusammen.



const express =                    

Empfehlungen