Sicherheit
Sicherheit
Kuglers Auth ist bewusst einfach und serverseitig aufgebaut. Kritische Zustände liegen in PostgreSQL, nicht im Browser.
Passwörter
Passwörter werden mit Argon2id gehasht. Im Klartext werden Passwörter weder gespeichert noch geloggt.
Das gilt auch für Client Secrets. Ein Client Secret wird nur einmal beim Erstellen angezeigt und danach als Hash gespeichert.
Cookies
Session-Cookies sind:
| Attribut | Wert |
|---|---|
HttpOnly | Ja |
Secure | Ja in Produktion |
SameSite | Lax |
Path | / |
Die Session selbst liegt serverseitig in der Datenbank. Im Cookie liegt nur ein zufälliges Token.
Rate Limiting
Login-Versuche werden pro IP und E-Mail limitiert.
Standardwerte:
| Variable | Bedeutung |
|---|---|
LOGIN_RATE_LIMIT_MAX | Maximale Login-Versuche im Fenster. |
LOGIN_RATE_LIMIT_WINDOW_SECONDS | Länge des Rate-Limit-Fensters. |
Redis speichert die kurzlebigen Rate-Limit-Zähler.
CSRF
Login, Logout und Adminaktionen nutzen CSRF-Tokens. Das Token wird als Cookie gesetzt und bei Formularaktionen geprüft.
Authorization Codes
Authorization Codes sind:
- zufällig generiert
- gehasht gespeichert
- 60 Sekunden gültig
- nur einmal nutzbar
- an Client und Redirect URI gebunden
Nicht registrierte Redirect URIs werden nicht akzeptiert.
Adminschutz
Das Adminpanel unter /admin ist nur für Benutzer mit Gruppe admin erreichbar.
Andere Gruppen wie os-admin, docs-admin und status-admin werden später von angebundenen Apps genutzt.
Secrets
Secrets gehören ausschließlich in .env.
Nicht in Git gehören:
- Datenbankpasswörter
- Admin-Erstpasswort
- JWT Private Key
- Client Secrets
- produktive
.env
Sicherheitsprüfung
Wichtige Prüfpunkte:
npm audit --omit=dev
npm run lint
npm run build
docker compose ps
curl -fsS https://auth.kuglers.at/api/health
Zuletzt aktualisiert: 2. Juni 2026