From 21aede48355b755059b4c39ca58c50b9af747363 Mon Sep 17 00:00:00 2001 From: Fabian Wolter Date: Sun, 14 Jun 2026 07:53:30 +0000 Subject: [PATCH] Document admin login endpoint --- install-notes/000-installation-index.md | 2 + .../021-auth-grundlage-admin-login.md | 129 ++++++++++++++++++ 2 files changed, 131 insertions(+) create mode 100644 install-notes/021-auth-grundlage-admin-login.md diff --git a/install-notes/000-installation-index.md b/install-notes/000-installation-index.md index 78555ef..c7070bc 100644 --- a/install-notes/000-installation-index.md +++ b/install-notes/000-installation-index.md @@ -25,3 +25,5 @@ - [019 - Bootstrap-Admin und erste Seed-Daten](019-bootstrap-admin-und-erste-seed-daten.md) - [020 - Bootstrap-Seed-Script und Admin-Passwort](020-bootstrap-seed-script-und-admin-passwort.md) + +- [021 - Auth-Grundlage und Admin-Login](021-auth-grundlage-admin-login.md) diff --git a/install-notes/021-auth-grundlage-admin-login.md b/install-notes/021-auth-grundlage-admin-login.md new file mode 100644 index 0000000..6ab114b --- /dev/null +++ b/install-notes/021-auth-grundlage-admin-login.md @@ -0,0 +1,129 @@ +# 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