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:
- Der Benutzer gibt seine Kennung (Login oder E-Mail) und sein Passwort ein.
- Gastkonten und Anwendungskennwörter verwenden immer die lokale Authentifizierung.
- Sync-in bereitet die LDAP-Kennung (UPN oder
DOMAIN\userfür AD) vor und versucht einen Bind. - 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.
- Wenn die Authentifizierung gültig ist, synchronisiert (oder erstellt) Sync-in das lokale Konto.
- Die Administratorrolle kann über eine LDAP-Gruppe zugewiesen werden.
- 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
baseDNmit dem verzeichnisspezifischen Suchfilter zuzüglich des konfiguriertenfilter. - 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 überupnSuffixhinzugefügt werden (z. B.user@sync-in.com).sAMAccountName: Ein Präfix kann übernetbiosNamehinzugefü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
memberOffalls vorhanden, - andernfalls über eine
groupOfNames-Suche (nützlich, wennmemberOfnicht 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.enablePasswordAuthFallbackaktiviert 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
autoCreateUseraktiviert ist, erstellt Sync-in ein lokales Konto. - Der lokale Login wird von
attributes.loginabgeleitet. - Die E-Mail-Adresse wird aus
attributes.emailübernommen (erforderlich). - Vor- und Nachname werden aus
givenName+sn,displayNameodercnabgeleitet. - Die anfänglichen Berechtigungen stammen aus
autoCreatePermissions. - Das Speicherkontingent wird aus
attributes.storageQuotasynchronisiert, wenn der LDAP-Eintrag einen gültigen Wert in Byte bereitstellt. Ein fehlender Wert oder ein Wert von0legt 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.