Admin kann Passwort eines Nutzers zuruecksetzen (temporaeres Passwort + Aenderungspflicht) #210

Closed
opened 2026-09-27 23:22:54 +02:00 by lena · 2 comments
Collaborator

User Story

Als Admin moechte ich das Passwort eines Nutzers zuruecksetzen koennen, wenn er sich nicht mehr anmelden kann, damit ich ihm schnell wieder Zugang verschaffe - auch wenn der E-Mail-Versand (Passwort-vergessen-Link) nicht funktioniert.

Direkter Auftrag im Chat (2026-09-27), Folge von #206.

Vorgehen

Der Server erzeugt ein zufaelliges temporaeres Passwort und zeigt es dem Admin genau einmal an. Der Admin gibt es dem Nutzer auf einem eigenen Weg weiter. Beim naechsten Login muss der Nutzer zuerst ein eigenes Passwort setzen, bevor er die App nutzen kann.

Akzeptanzkriterien

  • In der Admin-Uebersicht gibt es pro Nicht-Admin-Nutzer die Aktion "Passwort zuruecksetzen" mit Bestaetigungsdialog.
  • Der Server erzeugt ein kryptografisch zufaelliges temporaeres Passwort (keine verwechselbaren Zeichen); nur der Hash wird gespeichert. Das Klartext-Passwort erscheint nur in der Antwort an den Admin (einmalig, mit Kopieren-Knopf), nie im Log.
  • Alle bestehenden Sitzungen des Nutzers werden beendet; offene Passwort-vergessen-Links werden ungueltig.
  • Der Nutzer bekommt eine Info-E-Mail (ohne Passwort), dass ein Admin sein Passwort zurueckgesetzt hat. Fehlschlag blockiert den Reset nicht.
  • Nach dem Login mit dem temporaeren Passwort sieht der Nutzer nur einen "Neues Passwort festlegen"-Bildschirm, bis er es geaendert hat. Danach normal die App.
  • Eine regulaere Passwortaenderung (Einstellungen oder Passwort-vergessen-Link) hebt die Pflicht ebenfalls auf.
  • Die Admin-Uebersicht zeigt, bei wem die Aenderung noch aussteht.
  • Admin-Konten koennen so nicht zurueckgesetzt werden; der Endpunkt ist serverseitig admin-only.

Ausserhalb des Umfangs

  • Serverseitige Sperre aller anderen Endpunkte bis zur Aenderung (nur UI-seitig erzwungen, wie die Admin-Trennung in #206).
  • Admin-initiierter Versand eines Passwort-vergessen-Links.
## User Story Als Admin moechte ich das Passwort eines Nutzers zuruecksetzen koennen, wenn er sich nicht mehr anmelden kann, damit ich ihm schnell wieder Zugang verschaffe - auch wenn der E-Mail-Versand (Passwort-vergessen-Link) nicht funktioniert. Direkter Auftrag im Chat (2026-09-27), Folge von #206. ## Vorgehen Der Server erzeugt ein zufaelliges temporaeres Passwort und zeigt es dem Admin genau einmal an. Der Admin gibt es dem Nutzer auf einem eigenen Weg weiter. Beim naechsten Login muss der Nutzer zuerst ein eigenes Passwort setzen, bevor er die App nutzen kann. ## Akzeptanzkriterien - [ ] In der Admin-Uebersicht gibt es pro Nicht-Admin-Nutzer die Aktion "Passwort zuruecksetzen" mit Bestaetigungsdialog. - [ ] Der Server erzeugt ein kryptografisch zufaelliges temporaeres Passwort (keine verwechselbaren Zeichen); nur der Hash wird gespeichert. Das Klartext-Passwort erscheint nur in der Antwort an den Admin (einmalig, mit Kopieren-Knopf), nie im Log. - [ ] Alle bestehenden Sitzungen des Nutzers werden beendet; offene Passwort-vergessen-Links werden ungueltig. - [ ] Der Nutzer bekommt eine Info-E-Mail (ohne Passwort), dass ein Admin sein Passwort zurueckgesetzt hat. Fehlschlag blockiert den Reset nicht. - [ ] Nach dem Login mit dem temporaeren Passwort sieht der Nutzer nur einen "Neues Passwort festlegen"-Bildschirm, bis er es geaendert hat. Danach normal die App. - [ ] Eine regulaere Passwortaenderung (Einstellungen oder Passwort-vergessen-Link) hebt die Pflicht ebenfalls auf. - [ ] Die Admin-Uebersicht zeigt, bei wem die Aenderung noch aussteht. - [ ] Admin-Konten koennen so nicht zurueckgesetzt werden; der Endpunkt ist serverseitig admin-only. ## Ausserhalb des Umfangs - Serverseitige Sperre aller anderen Endpunkte bis zur Aenderung (nur UI-seitig erzwungen, wie die Admin-Trennung in #206). - Admin-initiierter Versand eines Passwort-vergessen-Links.
lena self-assigned this 2026-09-27 23:22:55 +02:00
Author
Collaborator

Start: direkter Auftrag im Chat.

Start: direkter Auftrag im Chat.
Author
Collaborator

Umgesetzt

Commits auf master: 87e29e40 (Schema MustChangePassword, Aufhebung durch jede eigene Passwortaenderung), 3fee7b03 (Admin-Reset-Befehl + Abfrage), c64944ca (Oberflaeche).

Umfang

  • Admin-Uebersicht: Schluessel-Symbol pro Nicht-Admin-Nutzer, Bestaetigungsdialog, danach wird das temporaere Passwort einmalig mit Kopieren-Knopf angezeigt. Die Zeile zeigt "Passwortaenderung ausstehend", bis der Nutzer es geaendert hat.
  • Server: zufaelliges Passwort (12 Zeichen, ohne verwechselbare Zeichen, ca. 69 Bit), nur der Hash wird gespeichert, nie im Log. Der Reset beendet alle Sitzungen des Nutzers, entwertet offene Passwort-vergessen-Links und schickt eine Info-E-Mail ohne Passwort. Admin-Konten sind ausgenommen, der Endpunkt ist admin-only.
  • Nutzer: Nach dem Login mit dem temporaeren Passwort erscheint auf jeder URL nur "Neues Passwort festlegen" (temporaeres Passwort + neues Passwort + Wiederholung; es muss sich vom temporaeren unterscheiden). Danach geht es direkt in die App. Eine Aenderung in den Einstellungen oder per Passwort-vergessen-Link hebt die Pflicht ebenfalls auf.

Tests

  • Backend: 8 Tests fuer den Reset-Befehl (nur Hash gespeichert, Format, Sitzungen beendet, Reset-Links entwertet, E-Mail ohne Passwort, Reset trotz E-Mail-Fehler, Admin abgelehnt, unbekannter Nutzer), Abfrage-Tests, Change/Reset-Password heben die Pflicht auf. Volle Suite 1034 + 63 + 119 gruen.
  • Frontend: Reset-Dialog-Tests in AdminPage.test.tsx, neue ForcedPasswordChangePage.test.tsx; 1460 gruen, Build/Lint sauber.
  • Live im Review-Container: Reset erzeugt das Passwort, das alte Passwort liefert 401, das temporaere fuehrt auch unter /list/2 zur Pflicht-Seite, nach der Aenderung oeffnet sich die App, das temporaere Passwort gilt nicht mehr, die Uebersicht zeigt nichts mehr als ausstehend.

Bewusst offen

  • Die Aenderungspflicht wird nur in der Oberflaeche erzwungen, der Admin kennt das Passwort, bis der Nutzer es aendert (siehe SECURITY_NOTES). Die Alternative ohne dieses Wissen waere ein vom Admin ausgeloester Passwort-vergessen-Link per E-Mail; der braucht aber funktionierenden E-Mail-Versand.
## Umgesetzt Commits auf master: 87e29e40 (Schema `MustChangePassword`, Aufhebung durch jede eigene Passwortaenderung), 3fee7b03 (Admin-Reset-Befehl + Abfrage), c64944ca (Oberflaeche). **Umfang** - Admin-Uebersicht: Schluessel-Symbol pro Nicht-Admin-Nutzer, Bestaetigungsdialog, danach wird das temporaere Passwort einmalig mit Kopieren-Knopf angezeigt. Die Zeile zeigt "Passwortaenderung ausstehend", bis der Nutzer es geaendert hat. - Server: zufaelliges Passwort (12 Zeichen, ohne verwechselbare Zeichen, ca. 69 Bit), nur der Hash wird gespeichert, nie im Log. Der Reset beendet alle Sitzungen des Nutzers, entwertet offene Passwort-vergessen-Links und schickt eine Info-E-Mail ohne Passwort. Admin-Konten sind ausgenommen, der Endpunkt ist admin-only. - Nutzer: Nach dem Login mit dem temporaeren Passwort erscheint auf jeder URL nur "Neues Passwort festlegen" (temporaeres Passwort + neues Passwort + Wiederholung; es muss sich vom temporaeren unterscheiden). Danach geht es direkt in die App. Eine Aenderung in den Einstellungen oder per Passwort-vergessen-Link hebt die Pflicht ebenfalls auf. **Tests** - Backend: 8 Tests fuer den Reset-Befehl (nur Hash gespeichert, Format, Sitzungen beendet, Reset-Links entwertet, E-Mail ohne Passwort, Reset trotz E-Mail-Fehler, Admin abgelehnt, unbekannter Nutzer), Abfrage-Tests, Change/Reset-Password heben die Pflicht auf. Volle Suite 1034 + 63 + 119 gruen. - Frontend: Reset-Dialog-Tests in `AdminPage.test.tsx`, neue `ForcedPasswordChangePage.test.tsx`; 1460 gruen, Build/Lint sauber. - Live im Review-Container: Reset erzeugt das Passwort, das alte Passwort liefert 401, das temporaere fuehrt auch unter /list/2 zur Pflicht-Seite, nach der Aenderung oeffnet sich die App, das temporaere Passwort gilt nicht mehr, die Uebersicht zeigt nichts mehr als ausstehend. **Bewusst offen** - Die Aenderungspflicht wird nur in der Oberflaeche erzwungen, der Admin kennt das Passwort, bis der Nutzer es aendert (siehe SECURITY_NOTES). Die Alternative ohne dieses Wissen waere ein vom Admin ausgeloester Passwort-vergessen-Link per E-Mail; der braucht aber funktionierenden E-Mail-Versand.
lena closed this issue 2026-09-27 23:41:01 +02:00
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
robert/todo#210
No description provided.