Heim >Web-Frontend >js-Tutorial >Erstellen und Sichern der JWT-Authentifizierung in einer Web-App

Erstellen und Sichern der JWT-Authentifizierung in einer Web-App

Susan Sarandon
Susan SarandonOriginal
2024-11-11 11:09:03629Durchsuche

Creating and Securing JWT Authentication in a Web App

Einführung

JSON Web Tokens (JWT) sind eine kompakte und eigenständige Möglichkeit, Informationen als JSON-Objekt sicher zwischen Parteien zu übertragen. JWTs werden häufig zur Authentifizierung von Benutzern in Webanwendungen verwendet. In diesem Tutorial erstellen wir ein Node.js- und Express-Backend mit JWT-Authentifizierung.

Was ist JWT?

JWT (JSON Web Token) ist ein offener Standard für die sichere Übertragung von Informationen zwischen Parteien als JSON-Objekt. Jeder Token besteht aus drei Teilen:

  1. Header: Enthält Informationen über den Typ und den Hashing-Algorithmus des Tokens.
  2. Nutzlast: Enthält Benutzerinformationen und Ansprüche.
  3. Signatur: Überprüft die Integrität des Tokens.

Beispiel JWT

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VySWQiOiIxMjM0IiwidXNlcm5hbWUiOiJqb2huZG9lIn0.H6BBiB1y5eXKXvW9bbjT2Rg8Jp4oE4Y5Kxf_sDF7Kzg

Einrichten des Projekts

  1. Erstellen Sie ein neues Projektverzeichnis:

    mkdir jwt-auth-app
    cd jwt-auth-app
    
  2. Initialisieren Sie ein neues Node.js-Projekt:

    npm init -y
    

Abhängigkeiten installieren

Installieren Sie die erforderlichen Abhängigkeiten:

npm install express jsonwebtoken bcryptjs dotenv express-validator
  • Express: Web-Framework für Node.js.
  • jsonwebtoken: Bibliothek zum Generieren und Überprüfen von JWTs.
  • bcryptjs: Bibliothek zum Hashing von Passwörtern.
  • dotenv: Für Umgebungsvariablen.
  • Express-Validator: Zur Validierung von Eingabedaten.

Konfigurieren des Servers

Erstellen Sie ein grundlegendes Server-Setup in server.js:

// server.js
require('dotenv').config();
const express = require('express');
const app = express();
app.use(express.json());

// Import Routes
const authRoutes = require('./routes/auth');
app.use('/api/auth', authRoutes);

const PORT = process.env.PORT || 5000;
app.listen(PORT, () => console.log(`Server running on port ${PORT}`));

Erstellen Sie eine .env-Datei zum Speichern von Umgebungsvariablen:

PORT=5000
JWT_SECRET=your_jwt_secret_key

Erstellen von Benutzerauthentifizierungsrouten

  1. Erstellen Sie die Datei „routes/auth.js“ für Authentifizierungsrouten:
// routes/auth.js
const express = require('express');
const { body, validationResult } = require('express-validator');
const bcrypt = require('bcryptjs');
const jwt = require('jsonwebtoken');
const router = express.Router();

const users = []; // In-memory user storage

// Signup Route
router.post(
  '/signup',
  [
    body('username').isLength({ min: 3 }),
    body('password').isLength({ min: 5 })
  ],
  async (req, res) => {
    const errors = validationResult(req);
    if (!errors.isEmpty()) return res.status(400).json({ errors: errors.array() });

    const { username, password } = req.body;
    const hashedPassword = await bcrypt.hash(password, 10);

    users.push({ username, password: hashedPassword });
    res.status(201).json({ message: 'User registered successfully' });
  }
);

// Login Route
router.post(
  '/login',
  [
    body('username').notEmpty(),
    body('password').notEmpty()
  ],
  async (req, res) => {
    const errors = validationResult(req);
    if (!errors.isEmpty()) return res.status(400).json({ errors: errors.array() });

    const { username, password } = req.body;
    const user = users.find(u => u.username === username);

    if (!user) return res.status(400).json({ message: 'Invalid credentials' });

    const isMatch = await bcrypt.compare(password, user.password);
    if (!isMatch) return res.status(400).json({ message: 'Invalid credentials' });

    const token = jwt.sign({ username }, process.env.JWT_SECRET, { expiresIn: '1h' });
    res.json({ token });
  }
);

module.exports = router;
  1. Erläuterung der Routen
  • Anmelderoute: Validiert und hasht das Passwort, bevor der Benutzer gespeichert wird.
  • Anmelderoute: Validiert Anmeldeinformationen, prüft das Passwort und stellt ein JWT-Token aus.

Generieren von JWT-Tokens

  • Die jwt.sign-Methode generiert ein Token, das die Informationen des Benutzers enthält.
  • JWT_SECRET wird zum Signieren des Tokens verwendet, das sicher und privat aufbewahrt werden sollte.
const token = jwt.sign({ username }, process.env.JWT_SECRET, { expiresIn: '1h' });

Sichern von Routen mit JWT

Um Routen zu schützen, erstellen Sie eine Middleware zur Überprüfung von Token.

  1. Middleware/auth.js erstellen:
// middleware/auth.js
const jwt = require('jsonwebtoken');

module.exports = function (req, res, next) {
  const token = req.header('Authorization')?.split(' ')[1];
  if (!token) return res.status(401).json({ message: 'Access denied' });

  try {
    const decoded = jwt.verify(token, process.env.JWT_SECRET);
    req.user = decoded;
    next();
  } catch (ex) {
    res.status(400).json({ message: 'Invalid token' });
  }
};
  1. Routen in server.js schützen:

Erstellen Sie eine geschützte Route, die ein gültiges Token erfordert:

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VySWQiOiIxMjM0IiwidXNlcm5hbWUiOiJqb2huZG9lIn0.H6BBiB1y5eXKXvW9bbjT2Rg8Jp4oE4Y5Kxf_sDF7Kzg

Erklärung der Middleware

  • Die Middleware prüft, ob das Token im Autorisierungsheader vorhanden ist.
  • Wenn das Token gültig ist, werden die Informationen des Benutzers zum req-Objekt hinzugefügt, wodurch der Zugriff auf die geschützte Route ermöglicht wird.

Abschluss

In diesem Tutorial haben wir die Grundlagen der Einrichtung der JWT-Authentifizierung in einem Node.js- und Express-Backend behandelt. Dieser Leitfaden demonstrierte:

  1. Einrichten von Authentifizierungsrouten für die Anmeldung und Anmeldung.
  2. Erstellen und Überprüfen von JWT-Tokens.
  3. Sichern von Routen mit einer JWT-basierten Middleware.

JWTs sind eine leistungsstarke Möglichkeit zur Authentifizierung und machen Ihre Webanwendungen sowohl sicher als auch skalierbar.

Das obige ist der detaillierte Inhalt vonErstellen und Sichern der JWT-Authentifizierung in einer Web-App. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn