• Deutsch
  • English
  • Anmeldung OTOBO Community
+49 (0)9427 68 39 000
OTOBO
  • SOFTWARE
    • Software | Überblick
    • IT Service Management
    • Customer Service Management
    • Enterprise Service Management
    • Demo
    • Download
    • Dokumentation
  • SERVICES
    • Überblick Services
    • Beratung
    • Training
    • Entwicklung
    • OTRS Migration zu OTOBO
    • Support
    • Managed Service
    • Support-Portal
  • UNTERNEHMEN
    • Über uns
    • Karriere
    • Partner
    • Kontakt
    • Newsletter
  • RESSOURCEN
  • COMMUNITY
    • Open Source
    • Community Forum
    • Download
    • Dokumentation
    • OTOBO übersetzen
  • Click to open the search input field Click to open the search input field Suche
  • Menü Menü

Schlagwörter: AD, Auth, backend, Customer, db, LDAP

Ansicht von 4 Antwort-Threads
  • Autor
    Beiträge
    • 17. Dezember 2025 um 13:24 Uhr - Views: 667 #38293
      John Erfurt
      Teilnehmer

        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
        John Erfurt
        Teilnehmer

          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
          John Erfurt
          Teilnehmer

            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
            Stefan Rother
            Administrator

              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
              John Erfurt
              Teilnehmer

                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

            • Autor
              Beiträge
            Ansicht von 4 Antwort-Threads
            • Du musst angemeldet sein, um auf dieses Thema antworten zu können.

            Foren durchsuchen

            Anmeldung

            Anmeldung

            Konto erstellen
            Passwort vergessen?

            Login via Social

            Profil

            Bitte vervollständigen Sie nach der Registrierung Ihr Profil, das vereinfacht die spätere Kommunikation enorm. Ihre Profileinstellung finden Sie, wenn Sie auf Ihr Avatarbild klicken.

            Sie können Ihren Avatar ändern, indem Sie sich mit Ihrer E-Mail-Adresse unter gravatar.com registrieren.

            Letzte Aktivitäten

            • FAQ: kaputtes Copy & Paste von Bildern zwischen Artikeln
            • Dynamische Felder in AgentTicketNote mit ACL verstecken
            • Benachrichtigung „Ticket wurde mir entzogen“ möglich?
            • Statistik Anzahl Tickets pro Agent
            • Docker: Ändern des redis Hosts

            Unternehmen

            Über uns
            Karriere
            Stellenbörse
            Partner werden
            Kontakt
            Newsletter

            OTOBO | Simplify work and create exceptional service experiences.

            Die Source Code Owner und Maintainer hinter OTOBO.

            Software

            Service Management-Plattform
            OTOBO Demo
            OTOBO Download
            OTOBO Dokumentation

            Security-Problem melden:
            security@otobo.org

            Services

            Support-Portal
            Beratung
            Training
            Support
            Managed Services
            Erweiterung
            OTRS Migration
            Partner finden

            Community

            Open Source
            Community Forum
            Mitmachen
            OTOBO Developer
            OTOBO@GitHub

            © 2026 Rother OSS GmbH | All rights reserved.
            • Cookie-Einstellungen
            • Impressum
            • Datenschutz
            • Haftungsausschluss
            Nach oben scrollen Nach oben scrollen Nach oben scrollen