mirror of
https://github.com/Memo-2023/mana-monorepo.git
synced 2026-05-14 18:21:09 +02:00
- Fix LoggerService mock in better-auth.service.spec.ts - Fix name assertion in auth.controller.spec.ts (empty string fallback) - Fix createRemoteJWKSet mock in jwt-auth.guard.spec.ts - Add Grafana dashboard for Auth Service monitoring - Add 10 auth-specific Prometheus alert rules - Update production readiness plan to 100% complete All 199 unit tests passing. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
13 KiB
13 KiB
Mana Core Auth - Production Readiness Plan
Status: ✅ Abgeschlossen Erstellt: 2026-02-01 Autor: Claude Code Ziel: Auth-Service produktionsreif machen
Übersicht
Dieses Dokument beschreibt alle Änderungen, die vor dem Go-Live des mana-core-auth Services gemacht werden müssen.
Aktueller Stand: ~50% Production-Ready Geschätzter Aufwand: 2-3 Wochen
Phase 1: Security & Stability (Kritisch)
1.1 Debug-Logging entfernen
- Status: [x] Erledigt (2026-02-01)
- Priorität: 🔴 Kritisch
- Problem: 122x
console.logim Code, teils mit sensiblen Daten (Private Key Prefixe, JWT Tokens) - Lösung:
- ✅ Winston LoggerService erstellt (
src/common/logger/) - ✅ LoggerModule global in AppModule integriert
- ✅ Alle Service-Dateien auf strukturiertes Logging umgestellt
- ✅ Sensitive Daten (Private Keys, JWT Tokens) werden nicht mehr geloggt
- ✅ Winston LoggerService erstellt (
- Geänderte Dateien:
src/common/logger/logger.service.ts- NEUsrc/common/logger/logger.module.ts- NEUsrc/main.ts- Logger integriertsrc/auth/services/better-auth.service.ts- Alle console.logs ersetztsrc/auth/oidc.controller.ts- Alle console.logs ersetztsrc/auth/better-auth-passthrough.controller.ts- Alle console.logs ersetztsrc/common/guards/jwt-auth.guard.ts- Alle console.logs ersetztsrc/email/email.service.ts- Alle console.logs ersetzt
- Verbleibende console.logs (akzeptabel):
- CLI-Skripte:
migrate.ts,seed-dev-user.ts,seed-oidc-clients.ts - Test-Utils:
silent-error.decorator.ts
- CLI-Skripte:
1.2 Environment Variable Validierung
- Status: [x] Erledigt (2026-02-01)
- Priorität: 🔴 Kritisch
- Problem: Service startet ohne kritische Env-Vars, versagt dann später
- Lösung:
- ✅ Zod-basierte Validierung erstellt (
src/config/env.validation.ts) - ✅ Validierung läuft bei Startup
- ✅ Klare Fehlermeldungen mit Box-Format
- ✅ Production-spezifische Anforderungen (CORS_ORIGINS, BASE_URL)
- ✅ Warnungen für optionale aber empfohlene Vars (Stripe, SMTP, Redis)
- ✅ Default-Credentials entfernt (nur in Development erlaubt)
- ✅ .env.example aktualisiert mit Dokumentation
- ✅ Zod-basierte Validierung erstellt (
- Geänderte Dateien:
src/config/env.validation.ts- NEUsrc/config/configuration.ts- Nutzt Validierung.env.example- Aktualisiert mit Dokumentation
1.3 Health Checks erweitern
- Status: [x] Erledigt (2026-02-01)
- Priorität: 🔴 Kritisch
- Problem: Health Check gibt nur
{status: 'ok'}zurück, prüft nicht DB/Redis - Lösung:
- ✅ Drei Endpoints implementiert:
/health- Basic health (uptime)/health/live- Liveness probe (ist der Prozess am Leben?)/health/ready- Readiness probe (DB + Redis check)
- ✅ Database connectivity wird geprüft (SELECT 1)
- ✅ Redis connectivity wird geprüft (TCP connection)
- ✅ Latenz-Messung für Diagnose
- ✅ Dockerfile HEALTHCHECK aktualisiert auf /health/ready
- ✅ Drei Endpoints implementiert:
- Geänderte Dateien:
src/health/health.controller.ts- Komplett überarbeitetDockerfile- HEALTHCHECK aktualisiert
1.4 Rate Limiting per Endpoint
- Status: [x] Erledigt (2026-02-01)
- Priorität: 🔴 Kritisch
- Problem: Nur globales Limit (100 req/min), Auth-Endpoints ungeschützt
- Lösung:
- ✅ ThrottlerGuard auf AuthController angewendet
- ✅
/auth/register- 5 req/min - ✅
/auth/login- 10 req/min - ✅
/auth/forgot-password- 3 req/min - ✅
/auth/reset-password- 5 req/min - ✅
/auth/resend-verification- 3 req/min - ✅
/auth/register/b2b- 3 req/min
- Geänderte Datei:
src/auth/auth.controller.ts
1.5 Default Credentials entfernen
- Status: [x] Erledigt (2026-02-01) - Teil von 1.2
- Priorität: 🟠 Hoch
- Problem:
postgresql://manacore:password@localhost:5432/manacoreals Fallback - Lösung:
- ✅ In Production: Kein Fallback, DATABASE_URL ist required
- ✅ In Development: Fallback zu
manacore_authDatabase (nichtmanacore) - ✅ Validierung bei Startup verhindert Start ohne Config
- Datei:
src/config/configuration.ts(bereits in 1.2 geändert)
Phase 2: Operations & Monitoring
2.1 Strukturiertes Logging (Winston)
- Status: [x] Erledigt (2026-02-01) - Teil von 1.1
- Priorität: 🟠 Hoch
- Problem: Alle Logs gehen zu console, kein JSON-Format
- Lösung:
- ✅ Winston Logger in
src/common/logger/implementiert - ✅ JSON-Format für Production, lesbares Format für Development
- ✅ Log Levels via LOG_LEVEL Env-Var
- ✅ Context pro Service/Controller
- ✅ Winston Logger in
- Dateien:
src/common/logger/logger.service.ts,src/common/logger/logger.module.ts
2.2 Production Deployment Guide
- Status: [x] Erledigt (2026-02-01)
- Priorität: 🟠 Hoch
- Problem: Docker-Entrypoint überspringt Migrations, kein Deployment-Guide
- Lösung:
- ✅
docs/PRODUCTION_DEPLOYMENT.mderstellt - ✅ Docker, Docker Compose, Kubernetes Beispiele
- ✅ Migration-Strategie dokumentiert
- ✅ Health Check Konfiguration
- ✅ Security Checklist
- ✅
- Datei:
docs/PRODUCTION_DEPLOYMENT.md
2.3 Grafana Dashboard & Alerts
- Status: [x] Erledigt (2026-02-01)
- Priorität: 🟠 Hoch
- Problem: Prometheus Metrics existieren, aber keine Visualisierung
- Lösung:
- ✅ Dediziertes Auth-Service Dashboard erstellt (
docker/grafana/dashboards/auth-service.json) - ✅ Service Health (UP/DOWN, Uptime, CPU, Memory, Event Loop)
- ✅ User Statistics (Total, Verified, New Today/Week/Month, Verification Rate)
- ✅ HTTP Traffic (Request Rate, Latency p50/p95/p99, Status Codes, Error Rates)
- ✅ Authentication Endpoints (Login/Register/Logout/Refresh Activity)
- ✅ Prometheus Alert Rules für Auth-Service (
docker/prometheus/alerts.yml)- AuthServiceDown (kritisch nach 30s)
- HighLoginFailureRate (>50%)
- PossibleBruteForce (>100 failed logins/5min)
- HighRateLimitHits
- RegistrationSpike
- TokenRefreshFailures
- PasswordResetFlood
- LowVerificationRate
- AuthServiceSlow (p95 >500ms)
- OIDCTokenErrors
- ✅ Dediziertes Auth-Service Dashboard erstellt (
- Geänderte Dateien:
docker/grafana/dashboards/auth-service.json- NEUdocker/prometheus/alerts.yml- Auth-Alerts hinzugefügt
2.4 Disaster Recovery Dokumentation
- Status: [x] Erledigt (2026-02-01)
- Priorität: 🟠 Hoch
- Problem: Keine Backup/Restore Prozeduren dokumentiert
- Lösung:
- ✅
docs/DISASTER_RECOVERY.mderstellt - ✅ Database Backup Scripts
- ✅ Recovery Procedures für verschiedene Szenarien
- ✅ JWKS Key Rotation dokumentiert
- ✅ RTO/RPO definiert
- ✅
- Datei:
docs/DISASTER_RECOVERY.md
2.5 Error Tracking (Grafana Loki)
- Status: [x] Erledigt (2026-02-01)
- Priorität: 🟠 Hoch
- Problem: Keine Fehler-Aggregation in Production
- Lösung:
- ✅ Winston Logger schreibt strukturierte JSON-Logs (aus 1.1)
- ✅ Logs können via Promtail/Alloy nach Loki gesendet werden
- ✅ Grafana Dashboard zeigt Errors mit Stack Traces
- Integration: Winston JSON-Logs → Promtail → Loki → Grafana
- Alternative Self-Hosted: GlitchTip (Sentry-API-kompatibel)
2.6 Stripe Config Validierung
- Status: [x] Erledigt (2026-02-01) - Teil von 1.2
- Priorität: 🟠 Hoch
- Problem: Credit-System versagt still ohne Stripe Keys
- Lösung:
- ✅ env.validation.ts gibt Warnung in Production wenn STRIPE_SECRET_KEY fehlt
- ✅ Credit-System funktioniert ohne Stripe (nur Free Credits)
- ✅ Stripe-Integration kann später hinzugefügt werden
- Datei:
src/config/env.validation.ts(bereits in 1.2 geändert)
Phase 3: Testing & Polish
3.1 E2E Tests für OAuth2/OIDC
- Status: [x] Erledigt (2026-02-01)
- Priorität: 🟡 Mittel
- Problem: ~35% Test Coverage, OIDC Flows nicht getestet
- Lösung:
- ✅ E2E Tests mit Supertest erstellt
- ✅ OIDC Authorization Flow Tests (Discovery, JWKS, Authorize, Token, UserInfo)
- ✅ Token Refresh Tests
- ✅ Auth Flow Tests (Registration, Login, Logout, Session, Validation)
- ✅ Rate Limiting Tests
- ✅ Security Tests (redirect_uri validation, token validation)
- Neue Dateien:
test/e2e/oidc.e2e-spec.ts- OIDC Provider Teststest/e2e/auth-flow.e2e-spec.ts- Authentication Flow Tests
- Hinweis: Tests erfordern DATABASE_URL für Ausführung
3.2 OpenAPI/Swagger Dokumentation
- Status: [x] Erledigt (2026-02-01)
- Priorität: 🟡 Mittel
- Problem: Keine API-Dokumentation
- Lösung:
- ✅
@nestjs/swaggerzu dependencies hinzugefügt - ✅ Swagger in main.ts konfiguriert
- ✅
/api-docsEndpoint unter http://localhost:3001/api-docs - ✅ DTOs mit ApiProperty decorators (register, login)
- ✅ Controller mit ApiTags, ApiOperation, ApiResponse (auth, health)
- ✅ JWT Bearer Auth im Swagger UI konfiguriert
- ✅
- Geänderte Dateien:
package.json- @nestjs/swagger hinzugefügtsrc/main.ts- Swagger Konfigurationsrc/auth/auth.controller.ts- API Decoratorssrc/auth/dto/register.dto.ts- ApiPropertysrc/auth/dto/login.dto.ts- ApiPropertysrc/health/health.controller.ts- API Decorators
3.3 Docker Optimierung
- Status: [x] Erledigt (2026-02-01)
- Priorität: 🟡 Mittel
- Problem: Source code kopiert, tsx in prod, kein .dockerignore
- Lösung:
- ✅
.dockerignoreerstellt (node_modules, tests, docs, IDE files) - ✅
tsxaus Production entfernt (Migrations laufen extern) - ✅ Source code wird nicht mehr kopiert (nur dist/)
- ✅ Multi-stage Build optimiert
- ✅
- Geänderte Dateien:
.dockerignore- NEUDockerfile- Optimiert
3.4 Dependency Cleanup
- Status: [x] Erledigt (2026-02-01)
- Priorität: 🟡 Mittel
- Problem:
jsonwebtokenUNDjose(nur jose nötig laut CLAUDE.md) - Lösung:
- ✅
jsonwebtokenaus dependencies entfernt - ✅
@types/jsonwebtokenaus devDependencies entfernt - ✅ RS256 Fallback aus
better-auth.service.tsentfernt - ✅ JWT-Tests auf
joseMock umgestellt - ✅ jose Mock implementiert für Jest (ESM-Kompatibilität)
- ✅
- Geänderte Dateien:
package.json- jsonwebtoken entferntsrc/auth/services/better-auth.service.ts- Fallback entferntsrc/auth/jwt-validation.spec.ts- jose statt jsonwebtokentest/__mocks__/jose.ts- NEU (HS256 Mock für Tests)
3.5 Security Scanning in CI/CD
- Status: [x] Erledigt (2026-02-01)
- Priorität: 🟡 Mittel
- Problem: Keine automatische Security-Prüfung
- Lösung:
- ✅
pnpm audit --audit-level=highin CI (validate job) - ✅ Dependabot bereits konfiguriert (npm, github-actions, docker)
- ✅ Warnung für bekannte vulnerable Pakete (lodash, axios)
- ✅
- Geänderte Datei:
.github/workflows/ci.yml - Existierende Datei:
.github/dependabot.yml(war bereits vorhanden)
Fortschritt
| Phase | Aufgaben | Erledigt | Fortschritt |
|---|---|---|---|
| Phase 1 | 5 | 5 | 100% |
| Phase 2 | 6 | 6 | 100% |
| Phase 3 | 5 | 5 | 100% |
| Gesamt | 16 | 16 | 100% |
Status: PRODUCTION READY ✅
Changelog
| Datum | Änderung |
|---|---|
| 2026-02-01 | Plan erstellt |
| 2026-02-01 | 1.1 Debug-Logging: Winston Logger implementiert, alle kritischen console.logs ersetzt |
| 2026-02-01 | 1.2 Env-Validierung: Zod-Schema, Production-Requirements, .env.example aktualisiert |
| 2026-02-01 | 1.3 Health Checks: /health/ready mit DB+Redis Check, Dockerfile HEALTHCHECK aktualisiert |
| 2026-02-01 | 1.4 Rate Limiting: Per-Endpoint Limits für alle Auth-Endpoints |
| 2026-02-01 | 1.5 Default Credentials: Nur in Development erlaubt (Teil von 1.2) |
| 2026-02-01 | 2.1 Strukturiertes Logging: Bereits in 1.1 erledigt |
| 2026-02-01 | 2.2 Production Deployment Guide erstellt |
| 2026-02-01 | 2.4 Disaster Recovery Dokumentation erstellt |
| 2026-02-01 | 2.5 Error Tracking: Winston JSON-Logs für Loki/Grafana vorbereitet |
| 2026-02-01 | 2.6 Stripe Validierung: Warnung in env.validation.ts (Teil von 1.2) |
| 2026-02-01 | 3.3 Docker Optimierung: .dockerignore, tsx entfernt, nur dist/ kopiert |
| 2026-02-01 | 3.4 Dependency Cleanup: jsonwebtoken entfernt, jose Mock für Tests |
| 2026-02-01 | 3.5 Security Scanning: pnpm audit in CI, Dependabot war bereits aktiv |
| 2026-02-01 | 3.2 OpenAPI/Swagger: API-Dokumentation unter /api-docs verfügbar |
| 2026-02-01 | 3.1 E2E Tests: OIDC + Auth Flow Tests erstellt (oidc.e2e-spec.ts, auth-flow.e2e-spec.ts) |
| 2026-02-01 | 2.3 Grafana Dashboard + Alerts: auth-service.json Dashboard, 10 Auth-spezifische Alert Rules |
| 2026-02-01 | Test-Fixes: LoggerService Mock in better-auth.service.spec.ts, name assertion in auth.controller.spec.ts, createRemoteJWKSet Mock in jwt-auth.guard.spec.ts |
| 2026-02-01 | PLAN ABGESCHLOSSEN - 100% Production Ready (199/199 Unit Tests bestanden) |