# 021 - Auth-Grundlage und Admin-Login ## Ziel Der Server wurde um eine erste Auth-Grundlage erweitert. Implementiert wurde ein Login-Endpunkt für den vorhandenen Bootstrap-Admin. ## Neuer Endpunkt POST /api/v1/auth/login Request: { "username": "admin", "password": "" } Response bei Erfolg: { "status": "ok", "tokenType": "Bearer", "accessToken": "...", "refreshToken": "...", "expiresInSeconds": 3600, "user": { "id": "...", "username": "admin", "displayName": "RUVNOX Admin", "role": "admin" } } ## Neue Dateien Security: - src/main/kotlin/de/ruvnox/tactical/security/PasswordHash.kt - src/main/kotlin/de/ruvnox/tactical/security/TokenSupport.kt API: - src/main/kotlin/de/ruvnox/tactical/api/AuthDtos.kt - src/main/kotlin/de/ruvnox/tactical/api/AuthRoutes.kt Repository: - src/main/kotlin/de/ruvnox/tactical/repository/SessionRepository.kt Geändert: - UserRepository.kt - Main.kt ## Passwortprüfung Der Server kann jetzt PBKDF2-SHA256-Hashes im Format des Bootstrap-Scripts prüfen: pbkdf2_sha256$iterations$salt_base64$hash_base64 Die Prüfung nutzt PBKDF2WithHmacSHA256 und konstantzeitnahen Vergleich über MessageDigest.isEqual. ## Token Beim Login werden erzeugt: - accessToken - refreshToken Der refreshToken wird nicht im Klartext gespeichert. In auth_sessions wird gespeichert: - refresh_token_hash = SHA-256(refreshToken) - user_id - expires_at - created_at - last_seen_at ## Datenbank Genutzte Tabelle: auth_sessions Nach erfolgreichem Login existiert mindestens eine aktive Session. ## Sicherheitshinweise Dies ist eine erste Auth-Grundlage. Noch nicht final umgesetzt: - geschützte Endpunkte - Bearer-Token-Prüfung - Refresh-Flow - Logout - Rollenprüfung auf Routen - Rate-Limiting - Brute-Force-Schutz - Session-Cleanup ## Verifikation Login wurde öffentlich geprüft: POST https://tactical.ruvnox.de/api/v1/auth/login Tokens wurden in der Ausgabe maskiert. ## Git-Commit tactical-server: Add admin login endpoint ## Abschlussstand - Passwort-Hash-Verifikation implementiert - Login-DTOs implementiert - Login-Route implementiert - Session-Erzeugung implementiert - Build erfolgreich - Deployment erfolgreich - Login erfolgreich geprüft - Server-Repo gepusht - Docs-Repo aktualisiert