diff --git a/adr/0019-organisationsverwaltung-stammdaten-und-kontenrollen.md b/adr/0019-organisationsverwaltung-stammdaten-und-kontenrollen.md index 1ab9cbc..b3cdf35 100644 --- a/adr/0019-organisationsverwaltung-stammdaten-und-kontenrollen.md +++ b/adr/0019-organisationsverwaltung-stammdaten-und-kontenrollen.md @@ -113,3 +113,37 @@ Organization-Kontaktfelder ergänzt. `benutzer` (inkl. der neuen Tabelle lebt in `kundenplattform`s eigener, von `provisioning-server` getrennter Datenbank (siehe ADR-0011) und war schon vorher nicht Bestandteil dieses Dokuments. + +## Nachtrag 26.08.2026: Self-Service-Passwortänderung + +Der ursprüngliche Umfang dieser ADR deckte Kontenverwaltung (Anlegen/ +Löschen fremder Konten durch `require_org_admin`) ab, aber keine +Möglichkeit für einen Nutzer, sein **eigenes** Passwort zu ändern — dafür +war bislang ausschließlich das CLI-Skript `scripts/reset_password.py` +(aus der Sicherheitshärtung vom 25.08.2026) zuständig, nicht per +Self-Service erreichbar. + +Neue Route `POST /organisation/passwort`, neue Sektion „Mein Konto" auf +derselben `/organisation`-Seite. Bewusst **ohne** `require_org_admin` — +anders als Kontenverwaltung für Dritte braucht das eigene Passwort keine +besondere Rolle, jedes eingeloggte Konto darf es ändern. Prüft das +aktuelle Passwort über `user_manager.authenticate()` (gleiches Muster wie +der Login in `auth.py`), validiert das neue Passwort explizit gegen die +bestehende `UserManager.validate_password()`-Policy (≥12 Zeichen, nicht +gleich der E-Mail-Adresse, siehe Sicherheitshärtung 25.08.2026) und zeigt +Fehler inline auf derselben Seite statt als nackte `HTTPException` — +dafür wurde die Kontext-Beschaffung aus `organisation_ansicht()` in eine +gemeinsame Hilfsfunktion `_organisation_kontext()` ausgelagert. + +Bekannte, akzeptierte Einschränkung: die JWT-Session bleibt nach einer +Passwortänderung bis zu ihrem regulären Ablauf gültig (kein +Session-Revocation-Mechanismus vorhanden, war auch vorher schon so) — +ein bereits eingeloggtes Gerät wird durch eine Passwortänderung nicht +automatisch ausgeloggt. + +Live auf anode verifiziert (WLAN-Test-Fixture-Konto, Passwort danach auf +den dokumentierten Fixture-Wert zurückgesetzt): falsches aktuelles +Passwort, zu kurzes neues Passwort, nicht übereinstimmende Wiederholung +liefern je `400` mit der passenden Inline-Fehlermeldung; der Erfolgsfall +liefert `303`, das alte Passwort funktioniert danach nicht mehr, das neue +sofort.