So erstellen Sie ein Authentifizierungssystem mit Claude Code (JWT und OAuth)
So erstellen Sie ein Authentifizierungssystem mit Claude Code (JWT und OAuth). Ein praktischer Leitfaden mit Codebeispielen.
Vorteile von Claude Code für die Authentifizierungssystem-Entwicklung
Authentifizierung ist eine sicherheitskritische Funktion, und Implementierungsfehler führen zu schwerwiegenden Sicherheitslücken. Claude Code generiert Implementierungen nach Sicherheits-Best-Practices und schlägt auch Gegenmaßnahmen für oft übersehene Angriffsvektoren vor.
JWT-Authentifizierung implementieren
> Implementiere JWT-Authentifizierung mit Express + TypeScript.
> Verwende ein 2-Token-System mit Access Token (15 Min.) und Refresh Token (7 Tage).
> Verwalte den Refresh Token als httpOnly-Cookie.
Authentifizierungsservice
import jwt from 'jsonwebtoken';
import bcrypt from 'bcrypt';
import { prisma } from './db';
const ACCESS_TOKEN_SECRET = process.env.ACCESS_TOKEN_SECRET!;
const REFRESH_TOKEN_SECRET = process.env.REFRESH_TOKEN_SECRET!;
interface TokenPayload {
userId: string;
email: string;
}
export class AuthService {
async register(email: string, password: string, name: string) {
const existing = await prisma.user.findUnique({ where: { email } });
if (existing) throw new Error('E-Mail bereits registriert');
const hashedPassword = await bcrypt.hash(password, 12);
const user = await prisma.user.create({
data: { email, password: hashedPassword, name },
});
return this.generateTokens({ userId: user.id, email: user.email });
}
async login(email: string, password: string) {
const user = await prisma.user.findUnique({ where: { email } });
if (!user) throw new Error('Ungültige Anmeldedaten');
const valid = await bcrypt.compare(password, user.password);
if (!valid) throw new Error('Ungültige Anmeldedaten');
return this.generateTokens({ userId: user.id, email: user.email });
}
async refreshToken(token: string) {
const payload = jwt.verify(token, REFRESH_TOKEN_SECRET) as TokenPayload;
// Gültigkeit des Refresh Tokens in der DB prüfen
const stored = await prisma.refreshToken.findFirst({
where: { token, userId: payload.userId, revoked: false },
});
if (!stored) throw new Error('Ungültiges Refresh Token');
// Altes Token ungültig machen (Token-Rotation)
await prisma.refreshToken.update({
where: { id: stored.id },
data: { revoked: true },
});
return this.generateTokens(payload);
}
private async generateTokens(payload: TokenPayload) {
const accessToken = jwt.sign(payload, ACCESS_TOKEN_SECRET, {
expiresIn: '15m',
});
const refreshToken = jwt.sign(payload, REFRESH_TOKEN_SECRET, {
expiresIn: '7d',
});
await prisma.refreshToken.create({
data: { token: refreshToken, userId: payload.userId },
});
return { accessToken, refreshToken };
}
}
Authentifizierungs-Middleware
import { Request, Response, NextFunction } from 'express';
import jwt from 'jsonwebtoken';
export function authMiddleware(req: Request, res: Response, next: NextFunction) {
const header = req.headers.authorization;
if (!header?.startsWith('Bearer ')) {
return res.status(401).json({ error: 'Kein Token bereitgestellt' });
}
const token = header.slice(7);
try {
const payload = jwt.verify(token, process.env.ACCESS_TOKEN_SECRET!);
req.user = payload as TokenPayload;
next();
} catch (err) {
return res.status(401).json({ error: 'Ungültiges oder abgelaufenes Token' });
}
}
Router-Konfiguration
import { Router } from 'express';
import { AuthService } from './auth-service';
const router = Router();
const auth = new AuthService();
router.post('/register', async (req, res) => {
try {
const { accessToken, refreshToken } = await auth.register(
req.body.email, req.body.password, req.body.name
);
res.cookie('refreshToken', refreshToken, {
httpOnly: true,
secure: true,
sameSite: 'strict',
maxAge: 7 * 24 * 60 * 60 * 1000,
});
res.json({ accessToken });
} catch (err) {
res.status(400).json({ error: (err as Error).message });
}
});
router.post('/login', async (req, res) => {
try {
const { accessToken, refreshToken } = await auth.login(
req.body.email, req.body.password
);
res.cookie('refreshToken', refreshToken, {
httpOnly: true,
secure: true,
sameSite: 'strict',
maxAge: 7 * 24 * 60 * 60 * 1000,
});
res.json({ accessToken });
} catch (err) {
res.status(401).json({ error: 'Ungültige Anmeldedaten' });
}
});
router.post('/refresh', async (req, res) => {
try {
const token = req.cookies.refreshToken;
const { accessToken, refreshToken } = await auth.refreshToken(token);
res.cookie('refreshToken', refreshToken, {
httpOnly: true,
secure: true,
sameSite: 'strict',
maxAge: 7 * 24 * 60 * 60 * 1000,
});
res.json({ accessToken });
} catch (err) {
res.status(401).json({ error: 'Ungültiges Refresh Token' });
}
});
export default router;
OAuth-Integration (Google)
> Füge Google-Login mit PassportJS hinzu. Integriere es mit der bestehenden JWT-Authentifizierung.
import passport from 'passport';
import { Strategy as GoogleStrategy } from 'passport-google-oauth20';
passport.use(new GoogleStrategy({
clientID: process.env.GOOGLE_CLIENT_ID!,
clientSecret: process.env.GOOGLE_CLIENT_SECRET!,
callbackURL: '/auth/google/callback',
}, async (accessToken, refreshToken, profile, done) => {
let user = await prisma.user.findFirst({
where: { providerId: profile.id, provider: 'google' },
});
if (!user) {
user = await prisma.user.create({
data: {
email: profile.emails![0].value,
name: profile.displayName,
provider: 'google',
providerId: profile.id,
},
});
}
done(null, user);
}));
Sicherheits-Checkliste
Sie können Claude Code mit folgendem Prompt um ein Sicherheitsaudit bitten.
> Überprüfe den Authentifizierungscode aus Sicherheitssicht.
> Prüfe anhand der OWASP Top 10.
Die wichtigsten Prüfpunkte sind:
- Wird bcrypt für das Passwort-Hashing verwendet?
- Ist der JWT-Secret-Key ausreichend lang?
- Ist Token-Rotation für Refresh Tokens implementiert?
- Sind CSRF-Gegenmaßnahmen vorhanden?
- Ist Rate Limiting konfiguriert?
Für die Aufrechterhaltung der Codequalität einschließlich Sicherheit ist auch die Refactoring-Automatisierung effektiv. Wenn Sie die Authentifizierungsrichtlinien in CLAUDE.md dokumentieren, generiert Claude Code konsistenten Code.
Zusammenfassung
Mit Claude Code können Sie ein robustes Authentifizierungssystem einschließlich JWT-Authentifizierung und OAuth-Integration effizient aufbauen. Da Code nach Sicherheits-Best-Practices generiert wird, lassen sich auch oft übersehene Sicherheitslücken leichter beheben. Stellen Sie in der Produktionsumgebung unbedingt die sichere Verwaltung von Secret Keys und HTTPS-Kommunikation sicher.
Weitere Informationen finden Sie in der offiziellen Anthropic-Dokumentation.
Kostenloses PDF: Claude-Code-Spickzettel in 5 Minuten
Trag einfach deine E-Mail-Adresse ein – wir senden dir den A4-Spickzettel als PDF sofort zu.
Wir behandeln deine Daten sorgfältig und senden niemals Spam.
Über den Autor
Masa
Ingenieur, der Claude Code intensiv nutzt. Betreibt claudecode-lab.com, ein Tech-Medium in 10 Sprachen mit über 2.000 Seiten.
Ähnliche Artikel
7 Prüfungen, bevor du täglich einen mehrsprachigen Claude-Code-Artikel veröffentlichst
Eine praktische Checkliste, damit tägliche mehrsprachige Claude-Code-Artikel nicht an fehlenden Sprachen, kaputten CTAs oder veralteten Live-Seiten scheitern.
Was sind Codex Automations? Content Ops mit KI planen und ausfuehren
Praktischer Leitfaden fuer Codex Automations: Analytics, Themenwahl, Artikel, CTA, Deployment und Monetarisierung.
Claude Code × GCP Cloud Functions Komplettanleitung | Serverlose Funktionen blitzschnell entwickeln
GCP Cloud Functions mit Claude Code optimieren. HTTP/Pub/Sub/Firestore-Trigger implementieren, lokal testen und Deployments automatisieren — mit echten Codebeispielen aus Masas Praxiserfahrung.