Anmeldung, Einrichtung des zweiten Faktors fuer den Notfall-Admin, erneute Bestaetigung vor kritischen Aktionen und die Seite fuer fehlende Rechte. Die Huelle zeigt jetzt den echten Benutzer, und jede Seite prueft die Sitzung selbst; ein struktureller Test haelt das fest. Die Ablaeufe sind im gebauten Stand gegen den Mock-OIDC geprueft (pnpm test:e2e): Admin, Konto ohne Gruppe, Notfall-Admin mit TOTP. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2.2 KiB
2.2 KiB
#004 Anmeldung, Rollen und erneute Bestätigung
Status: erledigt Meilenstein: v0.1.0 Labels: sicherheit Geschätzt: 5 h Tatsächlich: 0 h 45 min
Ziel
Anmeldung per OIDC (authentik, in der Entwicklung Mock-Anbieter) und lokaler Notfall-Admin mit Passwort + TOTP. Rollen Admin/Operator/Leser, Re-Auth für kritische Aktionen.
Aufgaben
- Sitzungs-Cookie (
jose), OIDC mit PKCE (openid-client) - Rollen aus authentik-Gruppen, bei jeder Anmeldung neu
- Notfall-Admin: argon2id + TOTP (Pflicht), Einrichtung beim ersten Login
- Re-Auth: OIDC
prompt=login/max_age=0+auth_time, Notfall-Admin Passwort + TOTP; Gültigkeit 5 min - Rechtetabelle
darf(), jede Seite/Route prüft selbst; struktureller Test - Rate-Limit für Anmeldung und Re-Auth
- Mock-OIDC-Anbieter in
docker-compose.dev.yml - Proxy mit CSP-Nonce und Sicherheits-Kopfzeilen
Akzeptanzkriterien
- Ohne Anmeldung keine Seite erreichbar
- Operator sieht keine Private-Key-Funktionen
- Re-Auth älter als 5 min wird abgelehnt
Abhängigkeiten
#003
Notizen / Entscheidungen
- Kein Auth.js, sondern Sitzung (
jose) und OIDC (openid-client) aus Laufzettel übernommen und angepasst. - Ohne sshkv-Gruppe kein Zugang – auch kein Lesezugriff (Abweichung von Laufzettel, das LESER vergibt).
- TOTP selbst implementiert (RFC 6238, Testvektoren aus Anhang B); jeder Code gilt einmal (
totpLetzterSchritt). - TOTP-Einrichtung: Das Geheimnis lebt bis zur Bestätigung nur in einem signierten httpOnly-Cookie (Pfad
/anmelden, 10 min); gespeichert wird es erst nach passendem Code, verschlüsselt mitSSHKV_APP_SECRET. - Re-Auth bei OIDC:
prompt=login,max_age=0, Prüfung vonauth_timegegen den Startzeitpunkt (30 s Toleranz). Gültigkeit 5 min, gespeichert inBenutzer.bestaetigtAm– serverseitig, nicht im Cookie. - Sitzungsdauer 8 h statt 12 h.
- Mock-OIDC über http nur mit
SSHKV_OIDC_HTTP_ERLAUBT=1(openid-client verweigert http zu Recht). - Struktureller Test
tests/zugang.test.ts: jedepage.tsx/route.tsprüft selbst oder steht namentlich in den Ausnahmen. - E2E (
pnpm test:e2e, gebauter Stand): OIDC-Admin, OIDC ohne Gruppe, Notfall-Admin mit TOTP-Einrichtung und Re-Auth – 4/4 grün.