Bastian Wagner 3e5348b7ec initial
2026-07-15 14:09:28 +02:00
2026-07-15 14:09:28 +02:00
2026-07-15 14:09:28 +02:00
2026-07-15 14:09:28 +02:00
2026-07-15 14:09:28 +02:00
2026-07-15 14:09:28 +02:00
2026-07-15 14:09:28 +02:00
2026-07-15 14:09:28 +02:00
2026-07-15 14:09:28 +02:00
2026-07-15 14:09:28 +02:00

LDAP Portal

Self-Service-Portal fuer LLDAP mit NestJS API und Angular Frontend.

Funktionen

  • Registrierung mit E-Mail-Verifikation
  • Login gegen LDAP/LLDAP
  • Passwortaenderung nach erfolgreichem LDAP-Login
  • Passwort-Reset ueber eigene Tokens und SMTP
  • Profilbearbeitung, E-Mail-Aenderung mit Verifikation und Account-Loeschanfrage
  • Admin-Bereiche fuer Registrierungen, Nutzer, Gruppen und Audit
  • Audit-Events fuer sicherheitsrelevante Aktionen in MySQL
  • OpenID Connect Provider fuer Web-SSO
  • Docker-Compose Setup fuer API und Web mit externer MySQL- und LLDAP-Anbindung

Lokale Entwicklung

cp .env.example .env
npm install
npm run start:api
npm run start:web

Die API laeuft standardmaessig auf http://localhost:3000, das Frontend auf http://localhost:4200.

Docker Compose

cp .env.example .env
docker compose up --build

Passe vor dem Start mindestens DATABASE_URL, JWT_SECRET, TOKEN_SECRET, LLDAP_* und SMTP_* an. Fuer OIDC muessen zusaetzlich OIDC_ISSUER, OIDC_COOKIE_SECRET, OIDC_ADMIN_GROUP und OIDC_ADMIN_GROUP_UUID gesetzt werden.

Externe Dienste

Die Anwendung bringt keine Datenbank und keinen LLDAP-Server mehr per Compose mit. Erwartet werden:

  • eine externe MySQL-Datenbank, z. B. mysql://ldap_portal:secret@mysql.example.com:3306/ldap_portal
  • ein externer LLDAP-HTTP-Endpunkt fuer GraphQL, z. B. https://lldap.example.com
  • ein externer LDAP-Endpunkt fuer Bind/Login, z. B. ldap://lldap.example.com:3890

Setze DATABASE_SSL=true, wenn der MySQL-Server TLS verlangt. In NODE_ENV=production sollte synchronize nicht genutzt werden; fuer produktive Deployments sollten TypeORM-Migrationen ergaenzt werden.

LLDAP-Hinweis

Die API nutzt LDAP-Bind fuer die Passwortpruefung und GraphQL fuer administrative User-Operationen. Falls sich die GraphQL-Mutationsnamen zwischen LLDAP-Versionen unterscheiden, muessen die Queries in apps/api/src/lldap/lldap.service.ts an die Zielversion angepasst werden.

OpenID Connect

Die API stellt einen OIDC Provider bereit. Die wichtigsten Endpunkte:

  • Discovery: /.well-known/openid-configuration
  • Authorization: /oidc/auth
  • Token: /oidc/token
  • UserInfo: /oidc/me
  • JWKS: /oidc/jwks
  • Logout: /oidc/session/end
  • Revocation: /oidc/token/revocation
  • Introspection: /oidc/token/introspection

OIDC-Clients werden im Frontend unter /admin/oidc-clients verwaltet. Zugriff erhaelt nur ein eingeloggter Nutzer, der in der LLDAP-Gruppe client_manager ist. Standardmaessig wird zusaetzlich die Gruppen-UUID 89aa3d8d-fcbd-3ec9-b99d-901a0cfc405e akzeptiert. Client Secrets werden nur direkt nach Erstellung angezeigt.

V1 unterstuetzt Authorization Code Flow mit verpflichtendem PKCE. Dynamic Client Registration und SAML sind nicht aktiviert.

Admin-Rollen

Admin-Berechtigungen werden ueber LLDAP-Gruppen gesteuert:

  • client_manager: OIDC-Clients verwalten.
  • registration_manager: Registrierungen freigeben oder ablehnen.
  • user_manager: Nutzer anzeigen, bearbeiten, loeschen und Gruppenmitgliedschaften aendern.
  • group_manager: Gruppen anzeigen, erstellen, bearbeiten und loeschen.
  • audit_viewer: Audit-Events anzeigen.

Die Registrierung laeuft in zwei Schritten: Nutzer bestaetigen zuerst ihre E-Mail-Adresse, danach muss ein registration_manager die Registrierung freigeben. Erst bei der Freigabe wird der LLDAP-User erstellt.

Description
No description provided
Readme 1.1 MiB
Languages
TypeScript 90.6%
Handlebars 5.7%
CSS 2.3%
Dockerfile 0.7%
JavaScript 0.5%
Other 0.2%