5.2 KiB
Moderierte Registrierung für desktop.kusche.berlin
Ziel
Neue Nutzer sollen sich über die Login-Seite registrieren können, aber nicht sofort Zugriff auf den Desktop erhalten.
Stattdessen soll der Ablauf so sein:
- Nutzer füllt Registrierungsformular aus.
- Anfrage wird als
ausstehendgespeichert. - Eine berechtigte Person prüft und genehmigt oder lehnt ab.
- Erst bei Genehmigung wird der LDAP-/NAS-kompatible Benutzer vollständig angelegt.
- Erst danach darf sich der Nutzer einloggen.
Warum der normale Keycloak-Registrierungsflow hier nicht reicht
Der Standard-Registrierungsflow von Keycloak ist für euer Setup ungeeignet, weil:
- Keycloak aktuell nur einen sehr schlanken LDAP-Eintrag erzeugt
- die NAS aber deutlich mehr Attribute erwartet
- Benutzer bei Standard-Registrierung sofort im Keycloak-Kontext existieren
- eine nachträgliche manuelle Freigabe damit unnötig kompliziert wird
Für eure Umgebung ist es sauberer, die Registrierung vor Keycloak bzw. neben Keycloak zu behandeln.
Empfohlene Architektur
1. Eigenes Registrierungsformular im Projekt
Nicht Keycloak Registrieren verwenden, sondern:
- eigene Seite, z. B.
/auth/register - eigenes Formular für:
- Benutzername
- Vorname
- Nachname
- Passwort
- optional Begründung / Einladungscode / Referenz
Diese Daten landen nicht direkt im LDAP, sondern zuerst in einer Warteschlange.
2. Pending-Store für Registrierungsanfragen
Die Registrierung wird lokal gespeichert, z. B.:
- JSON-Datei in
data/registration-requests.json - oder besser SQLite / kleine Datenbank
Status je Eintrag:
pendingapprovedrejectedprovisionedfailed
Zusätzlich speichern:
- Zeitstempel
- IP
- Browser
- gewünschter Benutzername
- Vorname / Nachname
- gehashter Passwort-Entwurf oder temporärer verschlüsselter Wert
Wichtig zum Passwort
Passwörter dürfen nicht im Klartext in so einer Warteschlange liegen.
Saubere Varianten:
- Passwort erst nach Freigabe setzen lassen
- oder verschlüsselt zwischenlagern
- oder nach Freigabe Einladungslink / Set-Password-Link senden
Empfehlung:
- bei Registrierung noch kein finales Passwort speichern
- nach Freigabe bekommt der Nutzer einen Aktivierungslink
- Passwort wird erst dann final gesetzt
Das ist deutlich sauberer und sicherer.
3. Admin-/Freigabe-Tool
Es braucht ein internes Tool, z. B.:
- Desktop-App
Benutzerfreigaben - oder vorerst einfache Admin-Seite
/admin/registrations
Funktionen:
- offene Registrierungen anzeigen
- Details prüfen
- genehmigen
- ablehnen
- Notiz hinterlegen
Nur bestimmte Gruppen dürfen das:
administrators- optional
appadmin
4. Provisioning-Tool für LDAP/NAS
Bei Genehmigung startet euer eigenes Provisioning-Tool.
Dieses Tool erzeugt dann den Benutzer korrekt für die NAS, also mit allen nötigen Feldern:
- passende
objectClass uidcnsnmailuidNumbergidNumberhomeDirectoryloginShell- ggf.
displayName - ggf.
gecos - ggf. Apple-/Samba-/Shadow-Felder
- passende Gruppenmitgliedschaften
Genau dieser Teil sollte nicht Keycloak überlassen werden.
5. Aktivierung für Keycloak-Login
Nach erfolgreicher LDAP-Anlage:
- Nutzerstatus im Pending-Store auf
provisioned - Login ab dann erlaubt
Optional zusätzlich:
- Nutzer in bestimmte Startgruppen setzen
- Mail zur Freischaltung versenden
- Passwort-Setzen-Link generieren
Technische Varianten
Variante A: Registrierung komplett außerhalb von Keycloak
Flow:
- Login-Seite hat Button
Registrieren - Button führt auf eure eigene Registrierungsseite
- Anfrage landet lokal im Pending-Store
- Admin genehmigt
- euer Tool legt LDAP-User korrekt an
- danach Login über Keycloak gegen LDAP
Das ist die empfohlene Variante.
Variante B: Keycloak-Registrierung bleibt aktiv
Flow:
- Nutzer registriert sich in Keycloak
- Benutzer wird dort oder im LDAP teilweise angelegt
- zusätzliche Freigabelogik blockiert Login
Nachteile:
- unsauberer Zustand
- doppelte Logik
- schwerer kontrollierbar
- LDAP-/NAS-Kompatibilität bleibt problematisch
Diese Variante würde ich nicht empfehlen.
Empfohlene Umsetzung für dieses Projekt
Phase 1
- Keycloak-Registrierung im Login-Theme wieder entfernen oder deaktivieren
- eigene Route
/auth/register - einfache Ablage als JSON oder SQLite
- Admin-Ansicht für Freigaben
Phase 2
- eigenes LDAP-Provisioning-Skript / Service
- Vergabe der fehlenden NAS-relevanten Attribute
- Gruppen-Standardzuweisung
Phase 3
- Aktivierungs-Mail oder Passwort-Setz-Link
- Audit-Log
- Benachrichtigungen für Administratoren
Konkrete Entscheidungsempfehlung
Ja, wir können dafür ein Tool bauen.
Die saubere Lösung ist:
- nicht die Keycloak-Registrierung zu verbiegen
- sondern eine eigene moderierte Registrierung im Projekt zu bauen
- und erst nach Freigabe den LDAP-/NAS-Benutzer korrekt zu provisionieren
Nächster sinnvoller Schritt
Als nächstes sollten wir bauen:
Registrierenim Login nicht mehr auf Keycloak zeigen lassen- neue Projektseite
/auth/register - lokaler
pending-Store - interne Admin-Seite für Freigaben
Danach kommt das LDAP-Provisioning.