-
AutorBeiträge
-
-
17. Dezember 2025 um 13:24 Uhr - Views: 120 #38293
Hallo zusammen,
ich beiße mir gerade beim Einrichten der customer backends die Zähne aus. Ziel ist es, sowohl DB als auch LDAP als Anmeldemethode zu nutzen. Ich habe folgende Konfiguration in der Config.pm im Container eingefügt:
$Self->{'CustomerUser::AuthModule'} = [
# Database Backend
$Self->{CustomerUser1} = {
Name => 'Database Backend',
Module => 'Kernel::System::CustomerUser::DB',
Params => {
DSN => 'DBI:mysql:database=<DB_NAME>;host=<DB_HOST>',
User => '<DB_USER>',
Password => '<DB_PASSWORD>',
Table => '<DB_TABLE>',
},
CustomerKey => 'login',
CustomerID => 'customer_id',
CustomerUserListFields => [ 'login', 'first_name', 'last_name' ],
CustomerUserSearchFields => [ 'login', 'first_name', 'last_name', 'customer_id' ],
CustomerUserSearchPrefix => '*',
CustomerUserSearchSuffix => '*',
CustomerUserSearchListLimit => 250,
CustomerUserPostMasterSearchFields => ['email'],
CustomerUserNameFields => [ 'title', 'first_name', 'last_name' ],
CustomerUserEmailUniqCheck => 1,
},
# LDAP Backend
$Self->{CustomerUser2} = {
Name => 'LDAP Backend',
Module => 'Kernel::System::CustomerUser::LDAP',
Params => {
Host => '<LDAP_HOST>',
BaseDN => '<LDAP_BASEDN>',
SSCOPE => 'sub',
UserDN => '<LDAP_BIND_DN>',
UserPw => '<LDAP_BIND_PASSWORD>',
AlwaysFilter => '<LDAP_ALWAYS_FILTER>',
Die => 0,
Params => {
port => 389,
timeout => 60,
async => 0,
version => 3,
},
},
CustomerKey => 'sAMAccountName',
CustomerID => 'division',
UserAutoCreate => 1,
CustomerUserListFields => [ 'cn', 'sAMAccountName' ],
CustomerUserSearchFields => [ 'cn', 'sAMAccountName' ],
CustomerUserSearchPrefix => '',
CustomerUserSearchSuffix => '*',
CustomerUserSearchListLimit => 250,
CustomerUserPostMasterSearchFields => ['mail'],
CustomerUserNameFields => [ 'givenName', 'sn' ],
AdminSetPreferences => 0,
Map => [
[ 'UserLogin', 'sAMAccountName', 1, 1, 'var', '', 1, undef, undef, undef ],
[ 'UserFirstname', 'givenName', 1, 1, 'var', '', 1, undef, undef, undef ],
[ 'UserLastname', 'sn', 1, 1, 'var', '', 1, undef, undef, undef ],
[ 'UserEmail', 'otherMailbox', 1, 1, 'var', '', 1, undef, undef, undef ],
#[ 'UserComment', 'description', 1, 0, 'var', '', 1, undef, undef, undef ],
[ 'UserCustomerID', 'division', 1, 1, 'var', '', 1, undef, undef, undef ],
],
},
];
Die entsprechenden Nutzerdaten habe ich durch Platzhalter ersetzt. Wenn ich mich jetzt versuche über einen Benutzer aus dem AD anzumelden, sehe ich den Logs dass nur gegen DB geprüft wird, nicht aber gegen LDAP.
Außerdem fehlen mir im Backend unter Kundenbenutzer hinzufügen so gut wie alle Felder wie Vorname, Nachname usw.
Was mache ich falsch?
Ich freue mich auf eure Antworten.
-
17. Dezember 2025 um 13:50 Uhr #38299
Kleines Update:
# Database Backend
$Self->{CustomerUser1} = {
Name => 'Database Backend',
Module => 'Kernel::System::CustomerUser::DB',
Params => {
DSN => 'DBI:mysql:database=<DB_NAME>;host=<DB_HOST>',
User => '<DB_USER>',
Password => '<DB_PASSWORD>',
Table => '<DB_TABLE>',
},
CustomerKey => 'login',
CustomerID => 'customer_id',
CustomerUserListFields => [ 'login', 'first_name', 'last_name' ],
CustomerUserSearchFields => [ 'login', 'first_name', 'last_name', 'customer_id' ],
CustomerUserSearchPrefix => '*',
CustomerUserSearchSuffix => '*',
CustomerUserSearchListLimit => 250,
CustomerUserPostMasterSearchFields => ['email'],
CustomerUserNameFields => [ 'title', 'first_name', 'last_name' ],
CustomerUserEmailUniqCheck => 1,
};# LDAP Backend
$Self->{CustomerUser2} = {
Name => 'LDAP Backend',
Module => 'Kernel::System::CustomerUser::LDAP',
Params => {
Host => '<LDAP_HOST>',
BaseDN => '<BASE_DN>',
SSCOPE => 'sub',
UserDN => '<BIND_USER_DN>',
UserPw => '<BIND_PASSWORD>',
AlwaysFilter => '<LDAP_FILTER>',
Die => 0,
Params => {
port => 389,
timeout => 60,
async => 0,
version => 3,
},
},
CustomerKey => 'sAMAccountName',
CustomerID => 'division',
UserAutoCreate => 1,
CustomerUserListFields => [ 'cn', 'sAMAccountName' ],
CustomerUserSearchFields => [ 'cn', 'sAMAccountName' ],
CustomerUserSearchPrefix => '',
CustomerUserSearchSuffix => '*',
CustomerUserSearchListLimit => 250,
CustomerUserPostMasterSearchFields => ['mail'],
CustomerUserNameFields => [ 'givenName', 'sn' ],
AdminSetPreferences => 0,
Map => [
[ 'UserLogin', 'sAMAccountName', 1, 1, 'var', '', 1, undef, undef, undef ],
[ 'UserFirstname', 'givenName', 1, 1, 'var', '', 1, undef, undef, undef ],
[ 'UserLastname', 'sn', 1, 1, 'var', '', 1, undef, undef, undef ],
[ 'UserEmail', 'otherMailbox', 1, 1, 'var', '', 1, undef, undef, undef ],
#[ 'UserComment', 'description', 1, 0, 'var', '', 1, undef, undef, undef ],
[ 'UserCustomerID', 'division', 1, 1, 'var', '', 1, undef, undef, undef ],
],
};Das löst mir den Fehler im Backend. Außerdem konnte ich in den Logs beobachten, dass wenn ich auf die Übersichtsseite der Kundenbenutzer gehe, folgender Eintrag erscheint:
[Wed Dec 17 12:49:13 2025][Error][Kernel::System::CustomerUser::DB::CustomerName][133] Need UserLogin!
[Wed Dec 17 12:49:13 2025][Error][Kernel::System::CustomerUser::DB::CustomerName][133] Need UserLogin!
[Wed Dec 17 12:49:13 2025][Error][Kernel::System::CustomerUser::LDAP::CustomerName][250] Need UserLogin!Beim Login in das Kundenportal sehe ich immer nur noch die Prüfung gegen DB:
[Wed Dec 17 12:50:20 2025][Notice][Kernel::System::CustomerAuth::DB::Auth] CustomerUser: No auth record in ‚customer_user‘ for ‚foo.bar‘ (REMOTE_ADDR: 172.16.20.46)
-
18. Dezember 2025 um 6:29 Uhr #38307
Ich möchte meine Lösungsansätze weiter teilen, bin aber dennoch auf Hilfe angewiesen:
# ---------------------------------------------------- #
# 1. Customer Authentication #
# ---------------------------------------------------- ## DB Auth als Basis (ohne Index, um den SysConfig-Standard zu bedienen)
$Self->{'Customer::AuthModule'} = 'Kernel::System::CustomerAuth::DB';# LDAP Auth mit Index 1
$Self->{'Customer::AuthModule1'} = 'Kernel::System::CustomerAuth::LDAP';
$Self->{'Customer::AuthModule::LDAP::Host1'} = '[LDAP_SERVER_IP_ODER_FQDN]';
$Self->{'Customer::AuthModule::LDAP::BaseDN1'} = '[BASE_DN]';
$Self->{'Customer::AuthModule::LDAP::UID1'} = 'sAMAccountName';
$Self->{'Customer::AuthModule::LDAP::SearchUserDN1'} = '[SEARCH_USER_DN]';
$Self->{'Customer::AuthModule::LDAP::SearchUserPw1'} = '[PASSWORT]';
$Self->{'Customer::AuthModule::LDAP::AlwaysFilter1'} = '(&(objectClass=user)(memberOf=[GRUPPEN_DN]))';
$Self->{'Customer::AuthModule::LDAP::Params1'} = {
port => 389,
timeout => 60,
async => 0,
version => 3,
};# ---------------------------------------------------- #
# 2. Customer User Data (Die Datenquelle) #
# ---------------------------------------------------- ## LDAP Datenquelle - MUSS AUCH INDEX 1 HABEN
$Self->{CustomerUser1} = {
Name => 'LDAP Backend',
Module => 'Kernel::System::CustomerUser::LDAP',
Params => {
Host => '[LDAP_SERVER_IP_ODER_FQDN]',
BaseDN => '[BASE_DN]',
SSCOPE => 'sub',
UserDN => '[SEARCH_USER_DN]',
UserPw => '[PASSWORT]',
AlwaysFilter => '(&(objectClass=user)(memberOf=[GRUPPEN_DN]))',
Params => {
port => 389,
timeout => 60,
async => 0,
version => 3,
},
},
CustomerKey => 'sAMAccountName',
CustomerID => 'division',
CustomerUserListFields => [ 'cn', 'sAMAccountName' ],
CustomerUserSearchFields => [ 'cn', 'sAMAccountName' ],
AdminSetPreferences => 0,
Map => [
[ 'UserLogin', 'sAMAccountName', 1, 1, 'var', '', 1, undef, undef, undef ],
[ 'UserFirstname', 'givenName', 1, 1, 'var', '', 1, undef, undef, undef ],
[ 'UserLastname', 'sn', 1, 1, 'var', '', 1, undef, undef, undef ],
[ 'UserEmail', 'otherMailbox', 1, 1, 'var', '', 1, undef, undef, undef ],
[ 'UserCustomerID', 'division', 1, 1, 'var', '', 1, undef, undef, undef ],
],
};Damit funktioniert der Auth für DB und LDAP. Der Login via DB funktioniert auch tadellos….nur LDAP immer noch nicht. Da kommt die Meldung:
Authentifizierung erfolgreich, aber im Kunden Backend wurde kein Kunden Eintrag gefunden. Bitte kontaktieren Sie Ihren Administrator.
Ein Anlegen mit AuthModule1 / CustomerUser1 und AuthModule2 / CustomerUser2 führt zu einem Internal Server Error – der Log spuckt dazu auch nichts aus.
Was fehlt mir jetzt noch bzw. was muss ich wie anpassen, damit der Login via LDAP auch komplett durchläuft?
-
18. Dezember 2025 um 11:33 Uhr #38311
Hallo John,
grundsätzlich bist Du auf dem richtigen Weg, allerdings sind die von der verwendeten Konfigurationen veraltet meiner Meinung nach.
Aber ein Schritt zurück. Wichtig ist, das gesamte Konstrukt zu verstehen:
Es existieren mehrere Dateien und Sourcen, aus denen in OTOBO Konfigurationsoptionen ausgelesen (und verwendet) werden. Wichtig sind hier für Dich die beiden Dateien Kernel/Config/Defaults.pm und Kernel/Config.pm. Die Datei Defaults.pm enthält alle wichtigen Basiskonfigurationen für OTOBO und wird zuerst eingelesen. Danach wird die Datei Config.pm eingelesen und überschreibt (wenn vorhanden), die Basis-Settings der Default.pm.
Der Grund ist, dass in der Defaults.pm in jedem Release Änderungen veröffentlicht werden könnten, zum Beispiel neue Optionen hinzukommen. Daher bitte nie Änderungen direkt in der Defaults.pm machen (auch wenn es kurz funktioniert), sondern die Konfigurationsoptionen die geändert werden sollen aus der Defaults.pm in die Config.pm kopieren.
Und hier fehlen einfach einige Optionen innerhalb der Konfiguration „CustomerUser1“ oben. Daher bitte nochmal die LDAP Anbindung aus der Defaults.pm in die Config.pm übernehmen. Ansonsten würde ich mal den Alwaysfilter rausnehmen zum testen. Die Meldung sagt einfach: „Authentifizierung war erfolgreich, aber ich habe dann keinen passenden Kunden in der DB oder LDAP gefunden“.
Ansonsten sieht das alles schon soweit gut aus, wenn Du wirklich den Login für Kunden konfigurieren möchtest (also *otobo/customer.pl). Wenn Du die Authentifizierung für Agenten konfigurieren möchtest, dann musst Du in der Defaults.pm nach „AuthModule::LDAP::*“ und AuthSyncModule::LDAP::*“ suchen und in der Config.pm verwenden.
Ich hoffe ich konnte weiterhelfen und wünsche Dir ein frohes Fest und ein gesundes Jahr 2026!
Stefan
-
18. Dezember 2025 um 12:12 Uhr #38314
Hallo Stefan,
danke für Deine ausführliche Antwort. Ich habe mir jetzt einfach noch mal alles aus der Defaults.pm kopiert und nach und nach an meine Daten angepasst. Scheinbar hat eine Konfiguration gefehlt – es funktioniert jetzt einwandfrei.
Vielen Dank!
Ich wünsche Dir und dem gesamtem Team schöne Weihnachtsfeiertage.
VG,
John
-
-
AutorBeiträge
- Du musst angemeldet sein, um auf dieses Thema antworten zu können.
