SmartCollect SC² Dokumentation / Index.md / LDAP-Authentifizierung

LDAP-Authentifizierung

Die LDAP-Integration in SmartCollect SC² ermöglicht es Ihren SmartCollect SC²-Benutzern, sich mit ihren LDAP-Anmeldedaten anzumelden. Sie können auch Mappings zwischen LDAP Gruppenmitgliedschaften und SmartCollect SC²-Organisationsbenutzerrollen festlegen.

Supported LDAP Servers

SmartCollect SC² verwendet eine Drittanbieter-LDAP-Bibliothek unter der Haube, die grundlegende LDAP-v3-Funktionalität unterstützt. Das bedeutet, dass Sie in der Lage sein sollten, die LDAP-Integration mit jedem konformen LDAPv3-Server zu konfigurieren, zum Beispiel OpenLDAP oder Active Directory unter anderen.

Enable LDAP

Um die LDAP-Integration zu verwenden, müssen Sie zunächst LDAP in der Hauptkonfigurationsdatei aktivieren sowie den Pfad zur LDAP spezifischen Konfigurationsdatei angeben (Standard: /etc/smartcollect/ldap.toml).

[auth.ldap]
# Set to `true` to enable LDAP integration (default: `false`)
enabled = true

# Path to the LDAP specific configuration file (default: `/etc/smartcollect/ldap.toml`)
config_file = /etc/smartcollect/ldap.toml

# Allow sign up should almost always be true (default) to allow new SmartCollect SC² users to be created (if LDAP authentication is ok). If set to
# false only pre-existing SmartCollect SC² users will be able to login (if LDAP authentication is ok).
allow_sign_up = true

SmartCollect SC² LDAP Konfiguration

Je nachdem, welchen LDAP-Server Sie verwenden und wie dieser konfiguriert ist, kann Ihre SmartCollect SC² LDAP-Konfiguration variieren. Siehe Konfigurationsbeispiele für weitere Informationen.

LDAP-spezifische Konfigurationsdatei (ldap.toml) Beispiel:

[[servers]]
# Ldap server host (specify multiple hosts space separated)
host = "127.0.0.1"
# Default port is 389 or 636 if use_ssl = true
port = 389
# Set to true if LDAP server supports TLS
use_ssl = false
# Set to true if connect LDAP server with STARTTLS pattern (create connection in insecure, then upgrade to secure connection with TLS)
start_tls = false
# set to true if you want to skip SSL cert validation
ssl_skip_verify = false
# set to the path to your root CA certificate or leave unset to use system defaults
# root_ca_cert = "/path/to/certificate.crt"
# Authentication against LDAP servers requiring client certificates
# client_cert = "/path/to/client.crt"
# client_key = "/path/to/client.key"

# Search user bind dn
bind_dn = "cn=admin,dc=smartcollect,dc=org"
# Search user bind password
# If the password contains # or ; you have to wrap it with triple quotes. Ex """#password;"""
bind_password = 'smartcollect'

# User search filter, for example "(cn=%s)" or "(sAMAccountName=%s)" or "(uid=%s)"
# Allow login from email or username, example "(|(sAMAccountName=%s)(userPrincipalName=%s))"
search_filter = "(cn=%s)"

# An array of base dns to search through
search_base_dns = ["dc=smartcollect,dc=org"]

# group_search_filter = "(&(objectClass=posixGroup)(memberUid=%s))"
# group_search_filter_user_attribute = "distinguishedName"
# group_search_base_dns = ["ou=groups,dc=smartcollect,dc=org"]

# Specify names of the LDAP attributes your LDAP uses
[servers.attributes]
name = "givenName"
surname = "sn"
username = "cn"
member_of = "memberOf"
email =  "email"

Umgebungsvariablen verwenden

Sie können Variablen in der TOML-Konfiguration aus Umgebungsvariablen interpolieren. Auf diese Weise könnten Sie zum Beispiel Ihr bind_password externalisieren:

bind_password = "${LDAP_ADMIN_PASSWORD}"

LDAP Debug Sicht

Nur in SmartCollect SC² v6.4+ verfügbar

SmartCollect SC² hat eine LDAP-Debug-Ansicht eingebaut, mit der Sie Ihre LDAP-Konfiguration direkt in SmartCollect SC² testen können. Im Moment können nur SmartCollect SC²-Administratoren die LDAP-Debug-Ansicht verwenden.

Innerhalb dieser Ansicht können Sie sehen, welche LDAP-Server derzeit erreichbar sind und Ihre aktuelle Konfiguration testen.

So verwenden Sie die Debug-Ansicht:

  1. Geben Sie den Benutzernamen eines Benutzers ein, der auf einem Ihrer LDAP-Server existiert
  2. Drücken Sie dann “Ausführen”.
  3. Wenn der Benutzer in einer Ihrer LDAP-Instanzen gefunden wird, werden die Zuordnungsinformationen angezeigt

Bind

Bind und Bind-Passwort

Standardmäßig erwartet die Konfiguration, dass Sie einen Bind-DN und ein Bind-Passwort angeben. Dies sollte ein schreibgeschützter Benutzer sein, der LDAP-Suchen durchführen kann. Wenn der Benutzer-DN gefunden wird, wird eine zweite Bindung mit dem vom Benutzer angegebenen Benutzernamen und Passwort (im normalen SmartCollect SC²-Anmeldeformular) durchgeführt.

bind_dn = "cn=admin,dc=smartcollect,dc=org"
bind_password = "smartcollect"

Einzelne Bindung Beispiel

Wenn Sie einen einzigen Bindungsausdruck bereitstellen können, der auf alle möglichen Benutzer zutrifft, können Sie die zweite Bindung überspringen und direkt gegen den Benutzer-DN binden. Dadurch können Sie kein bind_password in der Konfigurationsdatei angeben.

bind_dn = "cn=%s,o=users,dc=smartcollect,dc=org"

In diesem Fall überspringen Sie die Angabe eines bind_password und geben stattdessen einen bind_dn-Wert mit einem %s irgendwo an. Dieser wird durch den Benutzernamen ersetzt, der auf der SmartCollect SC²-Anmeldeseite eingegeben wird. Die Einstellungen für Suchfilter und Suchbasen werden immer noch benötigt, um die LDAP-Suche durchzuführen, um die anderen LDAP-Informationen (wie LDAP-Gruppen und E-Mail) abzurufen.

POSIX Schema

Wenn Ihr LDAP-Server das Attribut memberOf nicht unterstützt, fügen Sie diese Optionen hinzu:

## Group search filter, to retrieve the groups of which the user is a member (only set if memberOf attribute is not available)
group_search_filter = "(&(objectClass=posixGroup)(memberUid=%s))"
## An array of the base DNs to search through for groups. Typically uses ou=groups
group_search_base_dns = ["ou=groups,dc=smartcollect,dc=org"]
## the %s in the search filter will be replaced with the attribute defined below
group_search_filter_user_attribute = "uid"

Group Mappings

In [[servers.group_mappings]] können Sie eine LDAP-Gruppe einer SmartCollect SC²-Organisation und Rolle zuordnen. Diese werden jedes Mal synchronisiert, wenn sich der Benutzer anmeldet, wobei LDAP die maßgebliche Quelle ist. Wenn Sie also die Rolle eines Benutzers auf der SmartCollect SC² Org. Users-Seite ändern, wird diese Änderung bei der nächsten Anmeldung des Benutzers zurückgesetzt. Wenn Sie die LDAP-Gruppen eines Benutzers ändern, wird die Änderung bei der nächsten Anmeldung des Benutzers wirksam.

Die erste Gruppenzuordnung, der ein LDAP-Benutzer zugeordnet ist, wird für die Synchronisierung verwendet. Wenn Sie LDAP-Benutzer haben, die mehreren Zuordnungen entsprechen, wird die oberste Zuordnung in der TOML-Konfiguration verwendet.

LDAP-spezifische Konfigurationsdatei (ldap.toml) als Beispiel:

[[servers]]
# other settings omitted for clarity

[[servers.group_mappings]]
group_dn = "cn=superadmins,dc=smartcollect,dc=org"
org_role = "Admin"
smartcollect_admin = true # Available in SmartCollect SC² v5.3 and above

[[servers.group_mappings]]
group_dn = "cn=admins,dc=smartcollect,dc=org"
org_role = "Admin"

[[servers.group_mappings]]
group_dn = "cn=users,dc=smartcollect,dc=org"
org_role = "Editor"

[[servers.group_mappings]]
group_dn = "*"
org_role = "Viewer"
Setting Required Description Default
group_dn Yes LDAP distinguished name (DN) of LDAP group. If you want to match all (or no LDAP groups) then you can use wildcard ("*")
org_role Yes Assign users of group_dn the organization role "Admin", "Editor" or "Viewer"
org_id No The SmartCollect SC² organization database id. Setting this allows for multiple group_dn’s to be assigned to the same org_role provided the org_id differs 1 (default org id)
smartcollect_admin No When true makes user of group_dn SmartCollect SC² server admin. A SmartCollect SC² server admin has admin access over all organizations and users. Available in SmartCollect SC² v5.3 and above false

Verschachtelte/rekursive Gruppenzugehörigkeit

Benutzer mit verschachtelten/rekursiven Gruppenmitgliedschaften müssen einen LDAP-Server bereit stellen, der LDAP_MATCHING_RULE_IN_CHAIN unterstützt und group_search_filter so konfigurieren, dass er die Gruppen zurückgibt, in denen der übermittelte Benutzername Mitglied ist.

So konfigurieren Sie group_search_filter:

  • Sie können group_search_base_dns setzen, um anzugeben, wo die passenden Gruppen definiert sind.
  • Wenn Sie group_search_base_dns nicht verwenden, wird die zuvor definierte search_base_dns verwendet.

Beispiel Active Directory:

Active Directory-Gruppen speichern die Distinguished Names (DNs) der Mitglieder, so dass Ihr Filter den DN für den Benutzer nur auf der Grundlage des übermittelten Benutzernamens kennen muss. Mehrere DN-Vorlagen können durch die Kombination von Filtern mit dem LDAP-ODER-Operator durchsucht werden. Zwei Beispiele:

group_search_filter = "(member:1.2.840.113556.1.4.1941:=%s)"
group_search_base_dns = ["DC=mycorp,DC=mytld"]
group_search_filter_user_attribute = "dn"
group_search_filter = "(member:1.2.840.113556.1.4.1941:=CN=%s,[user container/OU])"
group_search_filter = "(|(member:1.2.840.113556.1.4.1941:=CN=%s,[user container/OU])(member:1.2.840.113556.1.4.1941:=CN=%s,[another user container/OU]))"
group_search_filter_user_attribute = "cn"

Weitere Informationen zu AD-Suchen finden Sie in der Dokumentation Microsoft’s Search Filter Syntax.

Wenn Sie zur Fehlerbehebung member_of in [servers.attributes] in “dn” ändern, werden Ihnen genauere Gruppenmitgliedschaften angezeigt, wenn debug is enabled.

Konfigurationsbeispiele

OpenLDAP

OpenLDAP ist ein Open-Source-Verzeichnisdienst.

LDAP-spezifische Konfigurationsdatei (ldap.toml):

[[servers]]
host = "127.0.0.1"
port = 389
use_ssl = false
start_tls = false
ssl_skip_verify = false
bind_dn = "cn=admin,dc=smartcollect,dc=org"
bind_password = 'smartcollect'
search_filter = "(cn=%s)"
search_base_dns = ["dc=smartcollect,dc=org"]

[servers.attributes]
name = "givenName"
surname = "sn"
username = "cn"
member_of = "memberOf"
email =  "email"

# [[servers.group_mappings]] omitted for clarity

Multiple LDAP Server

SmartCollect SC² unterstützt den Empfang von Informationen von mehreren LDAP-Servern.

LDAP-spezifische Konfigurationsdatei (ldap.toml):

# --- First LDAP Server ---

[[servers]]
host = "10.0.0.1"
port = 389
use_ssl = false
start_tls = false
ssl_skip_verify = false
bind_dn = "cn=admin,dc=smartcollect,dc=org"
bind_password = 'smartcollect'
search_filter = "(cn=%s)"
search_base_dns = ["ou=users,dc=smartcollect,dc=org"]

[servers.attributes]
name = "givenName"
surname = "sn"
username = "cn"
member_of = "memberOf"
email =  "email"

[[servers.group_mappings]]
group_dn = "cn=admins,ou=groups,dc=smartcollect,dc=org"
org_role = "Admin"
smartcollect_admin = true

# --- Second LDAP Server ---

[[servers]]
host = "10.0.0.2"
port = 389
use_ssl = false
start_tls = false
ssl_skip_verify = false

bind_dn = "cn=admin,dc=smartcollect,dc=org"
bind_password = 'smartcollect'
search_filter = "(cn=%s)"
search_base_dns = ["ou=users,dc=smartcollect,dc=org"]

[servers.attributes]
name = "givenName"
surname = "sn"
username = "cn"
member_of = "memberOf"
email =  "email"

[[servers.group_mappings]]
group_dn = "cn=editors,ou=groups,dc=smartcollect,dc=org"
org_role = "Editor"

[[servers.group_mappings]]
group_dn = "*"
org_role = "Viewer"

Aktives Verzeichnis

Active Directory ist ein Verzeichnisdienst, der häufig in Windows-Umgebungen verwendet wird.

Angenommen, der folgende Active Directory-Server ist eingerichtet:

  • IP address: 10.0.0.1
  • Domain: CORP
  • DNS name: corp.local

LDAP-spezifische Konfigurationsdatei (ldap.toml):

[[servers]]
host = "10.0.0.1"
port = 3269
use_ssl = true
start_tls = false
ssl_skip_verify = true
bind_dn = "CORP\\%s"
search_filter = "(sAMAccountName=%s)"
search_base_dns = ["dc=corp,dc=local"]

[servers.attributes]
name = "givenName"
surname = "sn"
username = "sAMAccountName"
member_of = "memberOf"
email =  "mail"

# [[servers.group_mappings]] omitted for clarity

Port-Anforderungen

Im obigen Beispiel ist SSL aktiviert und ein verschlüsselter Port wurde konfiguriert. Wenn Ihr Active Directory SSL nicht unterstützt, ändern Sie bitte enable_ssl = false und port = 389.

Bitte überprüfen Sie Ihre Active-Directory-Konfiguration und Dokumentation, um die richtigen Einstellungen zu finden. Weitere Informationen zu Active Directory und Port-Anforderungen finden Sie unter link.

Troubleshooting

Um Fehler zu beheben und mehr Protokollinformationen zu erhalten, aktivieren Sie die LDAP-Debug-Protokollierung in der Hauptkonfigurationsdatei.

[log]
filters = ldap:debug