🧪 Testing Infrastructure (45 tests, 100% passing) - Implemented Jest + Supertest framework for automated testing - Unit tests: 5 tests for auth middleware (100% coverage) - Integration tests: 40 tests covering admin, consent, migration, upload APIs - Test execution time: ~10 seconds for full suite - Coverage: 26% statements, 15% branches (realistic start) - In-memory SQLite database for isolated testing - Singleton server pattern for fast test execution - Automatic cleanup and teardown 🔒 Admin API Authentication - Bearer token authentication for all admin endpoints - requireAdminAuth middleware with ADMIN_API_KEY validation - Protected routes: /api/admin/*, /api/system/migration/migrate|rollback - Complete authentication guide in AUTHENTICATION.md - HTTP 403 for missing/invalid tokens, 500 if not configured - Ready for production with token rotation support 📋 API Route Documentation - Single Source of Truth: backend/src/routes/routeMappings.js - Comprehensive route overview in backend/src/routes/README.md - Express routing order documented (specific before generic) - Frontend integration guide with authentication examples - OpenAPI auto-generation integrated 🐛 Bug Fixes - Fixed SQLite connection not properly awaited (caused test hangs) - Fixed upload validation checking req.files.file before req.files - Fixed Express route order (consent before admin router) - Fixed test environment using /tmp for uploads (permission issues) 📚 Documentation Updates - Updated README.md with testing and authentication features - Updated README.dev.md with testing section and API development guide - Updated CHANGELOG.md with complete feature documentation - Updated FEATURE_PLAN-autogen-openapi.md (status: 100% complete) - Added frontend/MIGRATION-GUIDE.md for frontend team 🚀 Frontend Impact Frontend needs to add Bearer token to all /api/admin/* calls. See frontend/MIGRATION-GUIDE.md for detailed instructions. Test Status: ✅ 45/45 passing (100%) Backend: ✅ Production ready Frontend: ⚠️ Migration required (see MIGRATION-GUIDE.md)
5.0 KiB
5.0 KiB
API Authentication Guide
Übersicht
Die API verwendet zwei verschiedene Authentifizierungs-Mechanismen für unterschiedliche Zugriffslevel:
1. Admin-Routes (Bearer Token)
- Zweck: Geschützte Admin-Funktionen (Deletion Log, Cleanup, Moderation, Statistics)
- Methode: Bearer Token im Authorization Header
- Konfiguration:
.env→ADMIN_API_KEY
2. Management-Routes (UUID Token)
- Zweck: Self-Service Portal für Gruppen-Verwaltung
- Methode: UUID v4 Token in URL-Path
- Quelle: Automatisch generiert beim Upload, gespeichert in DB
1. Admin Authentication
Setup
-
Sicheren Admin-Key generieren:
# Linux/Mac: openssl rand -hex 32 # Oder Node.js: node -e "console.log(require('crypto').randomBytes(32).toString('hex'))" -
In
.enveintragen:ADMIN_API_KEY=dein-generierter-key-hier -
Server neu starten
Verwendung
Alle Requests an /api/admin/* benötigen den Authorization Header:
curl -H "Authorization: Bearer dein-generierter-key-hier" \
http://localhost:5000/api/admin/deletion-log
Postman/Insomnia:
- Type:
Bearer Token - Token:
dein-generierter-key-hier
Geschützte Endpoints
| Endpoint | Method | Beschreibung |
|---|---|---|
/api/admin/deletion-log |
GET | Deletion Log Einträge |
/api/admin/deletion-log/csv |
GET | Deletion Log als CSV |
/api/admin/cleanup/run |
POST | Cleanup manuell starten |
/api/admin/cleanup/status |
GET | Cleanup Status |
/api/admin/rate-limiter/stats |
GET | Rate-Limiter Statistiken |
/api/admin/management-audit |
GET | Management Audit Log |
/api/admin/groups |
GET | Alle Gruppen (Moderation) |
/api/admin/groups/:id/approve |
PUT | Gruppe freigeben |
/api/admin/groups/:id |
DELETE | Gruppe löschen |
Error Codes
| Status | Bedeutung |
|---|---|
403 |
Authorization header fehlt oder ungültig |
500 |
ADMIN_API_KEY nicht konfiguriert |
2. Management Authentication
Setup
Kein Setup nötig! Token werden automatisch generiert.
Funktionsweise
- Bei Upload wird automatisch ein UUID v4 Token generiert
- Token wird gespeichert in DB (Spalte:
management_token) - Token wird zurückgegeben in der Upload-Response
- Nutzer erhält Link wie:
https://example.com/manage/{token}
Verwendung
Token wird im URL-Path übergeben (nicht im Header):
# Token validieren und Daten laden
GET /api/manage/550e8400-e29b-41d4-a716-446655440000
# Bilder hochladen
POST /api/manage/550e8400-e29b-41d4-a716-446655440000/images
# Gruppe löschen
DELETE /api/manage/550e8400-e29b-41d4-a716-446655440000
Geschützte Endpoints
| Endpoint | Method | Beschreibung |
|---|---|---|
/api/manage/:token |
GET | Gruppen-Daten laden |
/api/manage/:token/consents |
PUT | Social Media Consents |
/api/manage/:token/metadata |
PUT | Metadaten bearbeiten |
/api/manage/:token/images |
POST | Bilder hinzufügen |
/api/manage/:token/images/:imageId |
DELETE | Bild löschen |
/api/manage/:token |
DELETE | Gruppe löschen |
Sicherheits-Features
- Token-Format Validierung: Nur gültige UUID v4 Tokens
- Rate Limiting: Schutz vor Brute-Force
- Audit Logging: Alle Aktionen werden geloggt
- DB-Check: Token muss in DB existieren
Error Codes
| Status | Bedeutung |
|---|---|
404 |
Token nicht gefunden oder Gruppe gelöscht |
429 |
Rate Limit überschritten |
Testing
Unit Tests
npm test -- tests/unit/auth.test.js
Integration Tests
# Admin Auth testen
npm test -- tests/api/admin-auth.test.js
# Alle API Tests
npm test
Manuelles Testen
Admin-Route ohne Auth:
curl http://localhost:5000/api/admin/deletion-log
# → 403 Forbidden
Admin-Route mit Auth:
curl -H "Authorization: Bearer your-key" \
http://localhost:5000/api/admin/deletion-log
# → 200 OK
Production Checklist
ADMIN_API_KEYmit sicherem 64-Zeichen Key setzen.envnicht in Git committen (bereits in.gitignore)- HTTPS verwenden (TLS/SSL)
- Rate Limiting aktiviert prüfen
- Audit Logs regelmäßig überprüfen
- Token-Rotation Policy für Admin-Key implementieren
Sicherheits-Hinweise
Admin-Key Rotation
Admin-Key regelmäßig erneuern (z.B. alle 90 Tage):
- Neuen Key generieren
.envaktualisieren- Server neu starten
- Alte Clients auf neuen Key umstellen
Management-Token
- Token sind permanent gültig bis Gruppe gelöscht wird
- Bei Verdacht auf Leak: Gruppe löschen (löscht auch Token)
- Token-Format (UUID v4) macht Brute-Force unpraktisch
Best Practices
- Admin-Key nie im Code hart-kodieren
- Admin-Key nie in Logs/Errors ausgeben
- Requests über HTTPS (kein Plain-HTTP in Production)
- Rate-Limiting für beide Auth-Typen aktiv
- Audit-Logs regelmäßig auf Anomalien prüfen