Guten Tag Torsten,
>> was "UID" bedeutet, ist hier dokumentiert
Stimmt, mein Fehler. Ich wollte mich dabei auch eigentlich auf das 'UserAttr' beziehen. Wobei der genaue Verwendungszweck des 'UID' in der Doku für meinen Geschmack auch noch ein wenig zu vage ist.
>> Ich würde vorschlagen zunächst auf GroupDN zu verzichten, wenn Du weißt dass Dein permanenter Filter korrekt ist.
Hatte das zum Zeitpunkt deiner Antwort schon soweit mit dem GroupDN zurechtgetüdelt, dass es wie gewünscht funktioniert.
Anbei mal meine gegenwärtige Config, Settings für Windows AD:
[
{
"Module": "Kernel::System::Auth::LDAP",
"Name": "AD_Fritz-EDV",
"Enabled": 1,
"Config": {
"Charset": "utf-8",
"Die": 0, # -> Unklar; Soll Funktion wohl beenden wenn Verbindung zum LDAP Host nicht etabliert werden kann. Wenn =1 -> Funktion 'die' wird ausgelöst, wenn =0 wird statt dessen eine Meldung ins LOGFILE geschrieben
"UID": "sAMAccountName",
"GroupDN": "CN=Serviceportal-Agent,OU=Sicherheitsgruppen,OU=Fritz-EDV,DC=fritz-edv,DC=local", # Diese Gruppe wird nach Attributen durchsucht um die Mitgliedschaft zu verifizieren; Filter zum Durchsuchen wird zusammengesetzt aus 'AccessAttr' + 'UserAttr'
"AccessAttr": "member", # Gibt das Attribut an, in welchem der zu verifizierende User aufzufinden ist. Attribut wird in der unter GroupDN genannten CN gesucht
"UserAttr": "DN", # Unklar; wenn = 'DN' dann identifiziert Funktion den distinguishedName des Benutzers aus den Attributen (->Windows AD); Andere Werte werden als auszulesendes Attribut interpretiert; Wird zusammen mit 'AccessAttr' als Filter zur Bestätigung der Mitgliedschaft in 'GroupDN' verwendet
"Host": "adgc.domain.tld",
"Params": {
"async": 0,
"port": 389,
"timeout": 120,
"version": 3
},
"SearchUserDN": "CN=LDAP-Abgleich,CN=Users,DC=fritz-edv,DC=local",
"SearchUserPw": "secret",
"BaseDN": "DC=Fritz-EDV,DC=local",
"AlwaysFilter": "(&(!(objectClass=computer))(!(userAccountControl:1.2.840.113556.1.4.803:=2))(|(objectClass=organizationalPerson)(&(objectClass=organizationalUnit)(!(objectClass=person)))))"
},
"Sync": [
{
"Module": "Kernel::System::Auth::Sync::LDAP",
"Enabled": 1,
"Config": {
"ContactUserSync": {
"Email": "mail",
"Firstname": "givenName",
"IsAgent": "SET:1",
"IsCustomer": "SET:1",
"Lastname": "sn",
"UserLogin": "sAMAccountName",
"Phone": "telephoneNumber",
"Fax": "facsimileTelephoneNumber",
"Mobile": "mobile",
"street": "streetAddress",
"zip": "postalCode",
"city": "l",
"country": "co",
"comments": "description" # <- dieses Funktioniert leider nicht :(
},
"GroupDNBasedRoleSync": {
"CN=Serviceportal-Agent,OU=Sicherheitsgruppen,OU=Fritz-EDV,DC=fritz-edv,DC=local": {
"Ticket Agent": 1,
"FAQ Editor": 1,
"Asset Maintainer": 1,
"Agent User": 1,
"Customer Manager": 1
}
}
}
}
]
},
{
"Config": {
"CryptType": "sha2"
},
"Enabled": 1,
"Module": "Kernel::System::Auth::DB",
"Name": "Local Database"
}
]
Fragwürdig:
[Wed Oct 21 10:23:37 2020][Info][Kernel::System::Contact::ContactGet] No contact assigned to user id 3!
Bei neuen Benutzern wird kein Kontakt erstellt, wenn dieser keine eMail Adresse im AD hinterlegt hat. Ich würde hier statt einem erfolgreichen Login, eine Fehlermeldung erwarten. Frei nach dem Motto: "No eMail Address in AD found, contact your Admin"
Wenn ich das im Quelltext richtig lese, dann werden neue Kontakte automatisch der PrimaryOrganisationID 1 zugeordnet. Besser wäre es, wenn man die PrimaryOrganisationID aus den Attributen übergeben könnte. Könnte man im Sync {} Objekt unterbringen, da die LDAP Anbindung bei den meisten vermutlich pro Kunde angelegt wird. Somit müsste man dann vorab nur noch die Kunden im Kontaktverzeichnis anlegen. Die korrekte ID kann man ja dann aus der Datenbank entnehmen.
Weitere Anmerkungen:
"IsAgent": "SET:1"
"IsCustomer": "SET:1"
Diese Attribute sollten Konditional setzbar sein bei Mitgliedschaft in einer bestimmten Gruppe. Momentan müsste man für eine Unterscheidung zwischen Kunde und Agent eine separate AD Anbindung schaffen. Würde im Prinzip gut ins 'GroupDNBasedRoleSync' reinpassen.
Edit:
Bezüglich der Kundenzuordnung bin ich in Eigenregie mal das Kernel::System::Auth::Sync::LDAP Modul angegangen
Hinzugefügt in Zeile 48:
$Self->{OrganisationID} = $Param{Config}->{OrganisationID} || '1';
Geändert in Zeile 242:
PrimaryOrganisationID => $Self->{OrganisationID},
Jetzt kann ich im Config Objekt einfach eine ID übergeben:
[
{
"Module": "Kernel::System::Auth::LDAP",
"Name": "AD_Fritz-EDV",
"Enabled": 1,
"Config": {
"Charset": "utf-8",
"OrganisationID": "2",
[....]
Alle Kontakte werden dann automatisch bei der Anmeldung der ID zugeordnet. Ich muss vorher nur sicherstellen, dass der Kunde im RDBMS mit der entsprechenden ID bereits existiert.