Zum Hauptinhalt springen

LDAP

In diesem Abschnitt wird der LDAP-Authentifizierungsmechanismus in Sync-in beschrieben.

Die Konfiguration befindet sich in environment.yaml, siehe Abschnitt LDAP.


Authentifizierungsablauf​

Der LDAP-Ablauf ist:

  1. Der Benutzer gibt seine Kennung (Login oder E-Mail) und sein Passwort ein.
    • Gastkonten und Anwendungskennwörter verwenden immer die lokale Authentifizierung.
  2. Sync-in bereitet die LDAP-Kennung (UPN oder DOMAIN\user für AD) vor und versucht einen Bind.
  3. Sync-in liest den authentifizierten LDAP-Eintrag (genauer DN für generische direkte Bindung, Teilbaumsuche für Service-Bindung und AD) und seine erforderlichen Attribute.
  4. Wenn die Authentifizierung gültig ist, synchronisiert (oder erstellt) Sync-in das lokale Konto.
  5. Die Administratorrolle kann über eine LDAP-Gruppe zugewiesen werden.
  6. Wenn LDAP nicht verfügbar ist, kann ein lokaler Fallback für Administratoren und optional für Standardbenutzer zugelassen werden (siehe Notfallzugriff).

Konfiguration​

Minimalbeispiel:

auth:
provider: ldap
ldap:
servers: ['ldap://localhost:389']
baseDN: 'ou=people,dc=ldap,dc=sync-in,dc=com'
attributes:
login: uid
email: mail

Attribute und Normalisierung​

Im LDAP-Eintrag sind folgende Attribute erforderlich:

  • attributes.login: wird für den lokalen Login verwendet.
  • attributes.email: wird für die lokale E-Mail verwendet.

attributes.storageQuota ist optional und lautet standardmäßig storageQuota. Wenn vorhanden, wird es als Kontingent in Bytes gelesen und mit dem lokalen Konto synchronisiert. Ungültige Werte lassen das lokale Kontingent unverändert. Ein fehlender Wert oder ein Wert von 0 legt unbegrenzten Speicherplatz fest.

Der lokale Login wird normalisiert: Wenn die Kennung als DOMAIN\user angegeben wird, wird nur user lokal gespeichert.
Das Feld memberOf wird in eine Liste von Werten und CNs normalisiert, was Gruppenprüfungen ermöglicht.
Wenn options.adminGroup festgelegt ist und memberOf nicht ausreicht, versucht Sync-in eine gezielte groupOfNames-Suche für diese Gruppe.


Dienstkonto​

Standardmäßig versucht Sync-in eine direkte Bindung unter Verwendung der Anmeldeinformationen des Benutzers.
Ein Dienstkonto kann für die Durchführung von LDAP-Suchen konfiguriert werden:

auth:
ldap:
serviceBindDN: 'cn=syncin,ou=services,dc=ldap,dc=sync-in,dc=com'
serviceBindPassword: 'LDAPServiceBindPasswordToChange'

Mit einer Servicebindung:

  • Erste Bindung mit dem Dienstkonto.
  • Benutzersuche unter baseDN mit dem verzeichnisspezifischen Suchfilter zuzüglich des konfigurierten filter.
  • Erneute Bindung mit dem gefundenen DN und dem bereitgestellten Passwort.

Ohne Dienstbindung:

  • Generisches LDAP: Sync-in erstellt <attributes.login>=<login>,<baseDN>, maskiert den Login als LDAP-RDN, führt einen Bind mit diesem DN aus und liest dann genau diesen Eintrag mit Basisumfang.
  • Active Directory: Sync-in führt einen Bind mit dem AD-Login aus und sucht anschließend nach dem Eintrag unter baseDN.

Für generisches LDAP gilt auch das optional konfigurierte filter für den genauen Lesevorgang. Ein erfolgreicher Lesevorgang ohne Rückgabe eines Eintrags beendet die Authentifizierung. Wenn das Verzeichnis diesen Lesevorgang aufgrund eines bekannten Zugriffs- oder Kompatibilitätsfehlers ablehnt, führt Sync-in eine geschützte Teilbaumsuche durch, wobei nur das konfigurierte attributes.login (+ filter) verwendet wird. Die Suche muss genau ein vollständiges, nicht gekürztes Ergebnis mit einem DN zurückgeben. Bevor Sync-in dessen Attribute verwendet, führt es mit diesem DN und dem übermittelten Passwort erneut einen Bind durch. Dieser Kompatibilitätspfad wird nicht für ein leeres Ergebnis oder einen nicht damit zusammenhängenden technischen Fehler ausgeführt.

Verwenden Sie ein Dienstkonto, wenn der Benutzer-DN nicht mit dieser Formel erstellt werden kann oder wenn Benutzer nicht nach den für Sync-in erforderlichen Attributen oder Gruppen suchen können.


Active Directory-Besonderheiten​

Wenn attributes.login sAMAccountName oder userPrincipalName ist, passt Sync-in den Login an:

  • userPrincipalName: Ein Suffix kann über upnSuffix hinzugefügt werden (z. B. user@sync-in.com).
  • sAMAccountName: Ein Präfix kann über netbiosName hinzugefügt werden (z. B. SYNC_IN\user).

In diesem Modus erfolgt die Benutzerbindung direkt mit dem bereitgestellten Login (UPN- oder DOMAIN\user-Format).

Teilbaum-Suchfilter werden automatisch angepasst:

  • AD: (sAMAccountName=...) OR (userPrincipalName=...) OR (mail=...)
  • Generisches LDAP mit einer Dienstbindung: (uid=...) OR (cn=...) OR (mail=...)

Der normale generische LDAP-Direktbindungspfad verwendet diesen ODER-Filter nicht: Er liest den authentifizierten DN selbst. Seine geschützte Kompatibilitätssuche berücksichtigt nur das konfigurierte attributes.login, erfordert ein eindeutiges, nicht gekürztes Ergebnis und führt anschließend einen erfolgreichen Bind mit dem DN dieses Ergebnisses aus.


Administratorrollen​

Wenn options.adminGroup festgelegt ist, prüft Sync-in die Gruppenmitgliedschaft:

  • über memberOf falls vorhanden,
  • andernfalls über eine groupOfNames-Suche (nützlich, wenn memberOf nicht verfügbar ist).

Wenn die Gruppensuche mit dem Benutzer nicht möglich ist, verwenden Sie ein Dienstkonto.

Wenn options.adminGroup nicht festgelegt ist, behalten bestehende Administratorkonten ihre Rolle und können nicht über LDAP herabgestuft werden.


Notfallzugriff (lokaler Fallback)​

Wenn LDAP nicht verfügbar ist (Verbindungsfehler, Dienst ausgefallen), kann Sync-in die lokale Passwortauthentifizierung zulassen:

  • Für Administratorkonten immer zulässig (Notfallzugriff), auch wenn die LDAP-Authentifizierung fehlschlägt.
  • Für andere Benutzer nur zulässig, wenn der Fehler mit der Nichtverfügbarkeit von LDAP zusammenhängt und options.enablePasswordAuthFallback aktiviert ist.

Dieser Mechanismus stellt die Kontinuität des Administratorzugriffs sicher, wenn der Verzeichnisdienst nicht verfügbar ist.

Damit dieser Notfallzugriff nutzbar ist, sollte für Administratorkonten ein lokales Sync-in-Passwort konfiguriert und verfügbar gehalten werden.

Für Standardbenutzer ist dieser Fallback standardmäßig deaktiviert.


Kontosynchronisierung​

Bei erfolgreicher Anmeldung:

  • Wenn der Benutzer nicht existiert und autoCreateUser aktiviert ist, erstellt Sync-in ein lokales Konto.
  • Der lokale Login wird von attributes.login abgeleitet.
  • Die E-Mail-Adresse wird aus attributes.email übernommen (erforderlich).
  • Vor- und Nachname werden aus givenName + sn, displayName oder cn abgeleitet.
  • Die anfänglichen Berechtigungen stammen aus autoCreatePermissions.
  • Das Speicherkontingent wird aus attributes.storageQuota synchronisiert, wenn der LDAP-Eintrag einen gültigen Wert in Byte bereitstellt. Ein fehlender Wert oder ein Wert von 0 legt unbegrenzten Speicherplatz fest.

Verfügbarkeit und Fehler​

Ungültige LDAP-Anmeldeinformationen lehnen die Authentifizierung ab.
LDAP-Konnektivitätsfehler werden als Dienstunverfügbarkeit behandelt und können einen lokalen Fallback auslösen (siehe Break-Glass).
Gastkonten und Anwendungskennwörter verwenden kein LDAP und authentifizieren sich immer lokal.

Sicherheit​

Es wird dringend empfohlen, LDAPS (ldaps://) oder StartTLS zu verwenden, um die während der LDAP-Bindung gesendeten Anmeldeinformationen zu schützen.