JWT: Token-basierte Authentifizierung | Enjyn Gruppe
Hallo Welt
Hallo Welt
Original Lingva Deutsch
Übersetzung wird vorbereitet...
Dieser Vorgang kann bis zu 60 Sekunden dauern.
Diese Seite wird erstmalig übersetzt und dann für alle Besucher gespeichert.
0%
DE Zurück zu Deutsch
Übersetzung durch Lingva Translate

241 Dokumentationen verfügbar

Wissensdatenbank

JWT Token Authentifizierung

Zuletzt aktualisiert: 11.01.2026 um 12:06 Uhr

JWT: Token-basierte Authentifizierung

JSON Web Tokens (JWT) sind ein offener Standard für sichere Datenübertragung. Sie werden häufig für API-Authentifizierung verwendet - stateless und skalierbar.

JWT-Aufbau

Ein JWT besteht aus drei Teilen, getrennt durch Punkte:

xxxxx.yyyyy.zzzzz
Header.Payload.Signature

Header

{
  "alg": "HS256",
  "typ": "JWT"
}

Payload (Claims)

{
  "sub": "1234567890",
  "name": "Max Mustermann",
  "email": "max@example.com",
  "role": "admin",
  "iat": 1704974400,
  "exp": 1705060800
}

Signature

HMACSHA256(
  base64UrlEncode(header) + "." + base64UrlEncode(payload),
  secret
)

JWT in PHP

// composer require firebase/php-jwt
use Firebase\JWT\JWT;
use Firebase\JWT\Key;

$secret = 'mein_geheimer_schluessel';

// Token erstellen
$payload = [
    'iss' => 'example.com',
    'sub' => '1234',
    'name' => 'Max',
    'role' => 'admin',
    'iat' => time(),
    'exp' => time() + 3600  // 1 Stunde
];

$token = JWT::encode($payload, $secret, 'HS256');

// Token verifizieren
try {
    $decoded = JWT::decode($token, new Key($secret, 'HS256'));
    echo "User: " . $decoded->name;
} catch (Exception $e) {
    echo "Token ungültig: " . $e->getMessage();
}

JWT in Node.js

// npm install jsonwebtoken
const jwt = require('jsonwebtoken');

const secret = 'mein_geheimer_schluessel';

// Token erstellen
const payload = {
    sub: '1234',
    name: 'Max',
    role: 'admin'
};

const token = jwt.sign(payload, secret, { expiresIn: '1h' });

// Token verifizieren
try {
    const decoded = jwt.verify(token, secret);
    console.log('User:', decoded.name);
} catch (err) {
    console.log('Token ungültig');
}

API-Authentifizierung

// Login-Route
app.post('/login', (req, res) => {
    const { email, password } = req.body;
    
    // User prüfen (Beispiel)
    const user = findUser(email, password);
    
    if (!user) {
        return res.status(401).json({ error: 'Invalid credentials' });
    }
    
    const token = jwt.sign(
        { sub: user.id, role: user.role },
        secret,
        { expiresIn: '24h' }
    );
    
    res.json({ token });
});

// Middleware
function authMiddleware(req, res, next) {
    const authHeader = req.headers.authorization;
    
    if (!authHeader || !authHeader.startsWith('Bearer ')) {
        return res.status(401).json({ error: 'No token' });
    }
    
    const token = authHeader.split(' ')[1];
    
    try {
        const decoded = jwt.verify(token, secret);
        req.user = decoded;
        next();
    } catch (err) {
        res.status(401).json({ error: 'Invalid token' });
    }
}

// Geschützte Route
app.get('/profile', authMiddleware, (req, res) => {
    res.json({ user: req.user });
});

Client-Seitig

// Login
async function login(email, password) {
    const res = await fetch('/login', {
        method: 'POST',
        headers: { 'Content-Type': 'application/json' },
        body: JSON.stringify({ email, password })
    });
    
    const data = await res.json();
    localStorage.setItem('token', data.token);
}

// API-Request mit Token
async function getProfile() {
    const token = localStorage.getItem('token');
    
    const res = await fetch('/profile', {
        headers: {
            'Authorization': `Bearer ${token}`
        }
    });
    
    return res.json();
}

Best Practices

  • Kurze Ablaufzeiten (1h für Access Token)
  • Starken Secret Key verwenden
  • HTTPS verwenden
  • Keine sensiblen Daten im Payload
  • Refresh Tokens für längere Sessions

Weitere Hilfe

Enjix Beta

Enjyn AI Agent

Hallo 👋 Ich bin Enjix — wie kann ich dir helfen?
120