Passwort-Vergessen-Funktion (Recherche: Keycloak vs. Frontend) #91

Closed
opened 2026-06-23 14:45:24 +02:00 by niboer · 2 comments
Owner

Beschreibung

Es soll eine "Passwort vergessen"-Funktion implementiert werden, die es Benutzern ermoeglicht, ihr Passwort zurueckzusetzen, ohne sich anmelden zu muessen.

Aufgabe

Zunaechst ist zu recherchieren und zu klaeren, welcher Ansatz besser geeignet ist:

Option A: Keycloak-eigene Oberflaeche

  • Keycloak bietet von Haus aus eine "Forgot Password"-Funktion ueber den Login-Flow
  • Ermoeglicht Passwort-Reset via E-Mail-Link
  • Anpassbar via Keycloak-Theme (bereits vorhanden)
  • Geringerer Entwicklungsaufwand

Option B: Eigenes Frontend

  • Eigenstaendige Seite im SvelteKit-Frontend
  • API-Kommunikation mit Keycloak (Account Console API oder Admin API)
  • Vollstaendig kontrolliertes UI/UX
  • Hoeherer Entwicklungsaufwand

Entscheidungskriterien

  • Aufwand / Nutzen-Verhaeltnis
  • Sicherheit (E-Mail-Verifikation, Token-Laufzeit)
  • UX-Konsistenz mit bestehendem Frontend
  • Wartbarkeit

Umsetzung (nach Entscheidung)

  • Implementierung des gewaehlten Ansatzes
  • Tests
  • Dokumentation
### Beschreibung Es soll eine "Passwort vergessen"-Funktion implementiert werden, die es Benutzern ermoeglicht, ihr Passwort zurueckzusetzen, ohne sich anmelden zu muessen. ### Aufgabe Zunaechst ist zu recherchieren und zu klaeren, welcher Ansatz besser geeignet ist: **Option A: Keycloak-eigene Oberflaeche** - Keycloak bietet von Haus aus eine "Forgot Password"-Funktion ueber den Login-Flow - Ermoeglicht Passwort-Reset via E-Mail-Link - Anpassbar via Keycloak-Theme (bereits vorhanden) - Geringerer Entwicklungsaufwand **Option B: Eigenes Frontend** - Eigenstaendige Seite im SvelteKit-Frontend - API-Kommunikation mit Keycloak (Account Console API oder Admin API) - Vollstaendig kontrolliertes UI/UX - Hoeherer Entwicklungsaufwand ### Entscheidungskriterien - Aufwand / Nutzen-Verhaeltnis - Sicherheit (E-Mail-Verifikation, Token-Laufzeit) - UX-Konsistenz mit bestehendem Frontend - Wartbarkeit ### Umsetzung (nach Entscheidung) - Implementierung des gewaehlten Ansatzes - Tests - Dokumentation
Author
Owner

Entscheidung: Option A — Keycloak-eigene Oberflaeche

Die Recherche ergibt eine klare Praeferenz fuer die Keycloak-interne Loesung:

  1. Keycloak stellt via parent=keycloak.v2 bereits alle benoetigten FTL-Templates bereit (login-reset-password.ftl, login-update-password.ftl, E-Mail-Vorlagen)
  2. login.css styled die PatternFly-v5-Klassen der Reset-Templates
  3. Kein Backend-Code fuer den eigentlichen Flow noetig (Keycloak uebernimmt Reset-Token, E-Mail-Versand, Passwort-Aenderung)
  4. Keine neuen Frontend-Seiten — Der Link erscheint automatisch auf Keycloaks Login-Seite sobald resetPasswordAllowed aktiviert ist
  5. Keine Secrets in der Applikation — SMTP-Zugangsdaten bleiben in Keycloak

Umsetzungsplan (5 Commits)

Commit 1 — chore(infra): MailHog fuer E-Mail-Tests in Docker-Compose integriert

Docker-Compose um MailHog-Service ergaenzen, SMTP-Env-Vars fuer Keycloak, Env-Vars fuer backend-provisioning.

Datei Aenderung
docker-compose.yml MailHog-Service (Port 1025 SMTP, 8025 Web-UI) + SMTP-Env-Vars Keycloak
.env + .env.example SMTP_HOST, SMTP_PORT, SMTP_FROM
PROJECT_STATE.md Aktualisieren

Commit 2 — feat(keycloak): Login-Theme auf keycloak.v2 umgestellt + resetPasswordAllowed aktiviert

Parent auf keycloak.v2 (PatternFly 5), CSS-Klassen migrieren, Realm-Schalter setzen.

Datei Aenderung
keycloak/themes/.../login/theme.properties parent=keycloak.v2
keycloak/themes/.../login/resources/css/login.css pf-c-*pf-v5-c-*
keycloak/realm-export.json resetPasswordAllowed: true
PROJECT_STATE.md Aktualisieren

Commit 3 — feat(backend): SMTP-Config in Keycloak-Provisioning gesetzt

Neue Funktion configureRealmSmtp() in keycloak-provision.ts, ruft Admin-API PUT /admin/realms/{realm} auf.

Datei Aenderung
backend/src/lib/keycloak-provision.ts configureRealmSmtp() + Aufruf in provisionKeycloak()
PROJECT_STATE.md Aktualisieren

Commit 4 — test(backend): resetPasswordAllowed + SMTP-Provisioning getestet

Neue Tests in keycloak-roles.test.ts, ggf. keycloak-provision.test.ts.

Datei Aenderung
backend/src/__tests__/keycloak-roles.test.ts Test: resetPasswordAllowed === true
PROJECT_STATE.md Aktualisieren

Commit 5 — docs: Passwort-Vergessen-Flow dokumentiertcloses #91

Neuer Abschnitt in Auth-Dokumentation + PROJECT_STATE finalisieren.

Datei Aenderung
docs/design/05-authentifizierung.md Neuer Abschnitt "Passwort-Vergessen (Forgot Password)"
PROJECT_STATE.md Finales Update
## Entscheidung: Option A — Keycloak-eigene Oberflaeche Die Recherche ergibt eine klare Praeferenz fuer die Keycloak-interne Loesung: 1. **Keycloak** stellt via `parent=keycloak.v2` bereits alle benoetigten FTL-Templates bereit (`login-reset-password.ftl`, `login-update-password.ftl`, E-Mail-Vorlagen) 2. **login.css** styled die PatternFly-v5-Klassen der Reset-Templates 3. **Kein Backend-Code** fuer den eigentlichen Flow noetig (Keycloak uebernimmt Reset-Token, E-Mail-Versand, Passwort-Aenderung) 4. **Keine neuen Frontend-Seiten** — Der Link erscheint automatisch auf Keycloaks Login-Seite sobald `resetPasswordAllowed` aktiviert ist 5. **Keine Secrets in der Applikation** — SMTP-Zugangsdaten bleiben in Keycloak ## Umsetzungsplan (5 Commits) ### Commit 1 — `chore(infra): MailHog fuer E-Mail-Tests in Docker-Compose integriert` Docker-Compose um MailHog-Service ergaenzen, SMTP-Env-Vars fuer Keycloak, Env-Vars fuer backend-provisioning. | Datei | Aenderung | |---|---| | `docker-compose.yml` | MailHog-Service (Port 1025 SMTP, 8025 Web-UI) + SMTP-Env-Vars Keycloak | | `.env` + `.env.example` | `SMTP_HOST`, `SMTP_PORT`, `SMTP_FROM` | | `PROJECT_STATE.md` | Aktualisieren | ### Commit 2 — `feat(keycloak): Login-Theme auf keycloak.v2 umgestellt + resetPasswordAllowed aktiviert` Parent auf `keycloak.v2` (PatternFly 5), CSS-Klassen migrieren, Realm-Schalter setzen. | Datei | Aenderung | |---|---| | `keycloak/themes/.../login/theme.properties` | `parent=keycloak.v2` | | `keycloak/themes/.../login/resources/css/login.css` | `pf-c-*` → `pf-v5-c-*` | | `keycloak/realm-export.json` | `resetPasswordAllowed: true` | | `PROJECT_STATE.md` | Aktualisieren | ### Commit 3 — `feat(backend): SMTP-Config in Keycloak-Provisioning gesetzt` Neue Funktion `configureRealmSmtp()` in `keycloak-provision.ts`, ruft Admin-API `PUT /admin/realms/{realm}` auf. | Datei | Aenderung | |---|---| | `backend/src/lib/keycloak-provision.ts` | `configureRealmSmtp()` + Aufruf in `provisionKeycloak()` | | `PROJECT_STATE.md` | Aktualisieren | ### Commit 4 — `test(backend): resetPasswordAllowed + SMTP-Provisioning getestet` Neue Tests in `keycloak-roles.test.ts`, ggf. `keycloak-provision.test.ts`. | Datei | Aenderung | |---|---| | `backend/src/__tests__/keycloak-roles.test.ts` | Test: `resetPasswordAllowed === true` | | `PROJECT_STATE.md` | Aktualisieren | ### Commit 5 — `docs: Passwort-Vergessen-Flow dokumentiert` — `closes #91` Neuer Abschnitt in Auth-Dokumentation + PROJECT_STATE finalisieren. | Datei | Aenderung | |---|---| | `docs/design/05-authentifizierung.md` | Neuer Abschnitt "Passwort-Vergessen (Forgot Password)" | | `PROJECT_STATE.md` | Finales Update |
Author
Owner

Implementierung abgeschlossen.

Commits:

  • 66e8341 — MailHog in Docker-Compose integriert
  • a79e60d — Login-Theme auf keycloak.v2 + resetPasswordAllowed
  • 753456a — SMTP-Config in Keycloak-Provisioning gesetzt
  • 966f1f4 — Tests fuer resetPasswordAllowed
  • 02a5843 — Dokumentation (closes)

Zusammenfassung:

  • Keycloak-eigener Forgot-Password-Flow (Option A) implementiert
  • MailHog als Dev-SMTP-Server in Docker-Compose
  • SMTP-Konfiguration via Backend-Provisioning (Admin API)
  • Login-Theme auf keycloak.v2 (PF5) migriert
  • resetPasswordAllowed: true im Realm aktiviert
  • Doku in 05-authentifizierung.md
Implementierung abgeschlossen. **Commits:** - `66e8341` — MailHog in Docker-Compose integriert - `a79e60d` — Login-Theme auf keycloak.v2 + resetPasswordAllowed - `753456a` — SMTP-Config in Keycloak-Provisioning gesetzt - `966f1f4` — Tests fuer resetPasswordAllowed - `02a5843` — Dokumentation (closes) **Zusammenfassung:** - Keycloak-eigener Forgot-Password-Flow (Option A) implementiert - MailHog als Dev-SMTP-Server in Docker-Compose - SMTP-Konfiguration via Backend-Provisioning (Admin API) - Login-Theme auf `keycloak.v2` (PF5) migriert - `resetPasswordAllowed: true` im Realm aktiviert - Doku in 05-authentifizierung.md
Sign in to join this conversation.
No description provided.