Kundenlogin /-suche über LDAP-Anbindung

Hilfe zu Znuny Problemen aller Art
Locked
NiteFlame
Znuny newbie
Posts: 23
Joined: 26 Jan 2006, 15:57

Kundenlogin /-suche über LDAP-Anbindung

Post by NiteFlame »

Guten Morgen,

nach dem es mir erfolgreich gelungen ist, die Authentifizierung meiner Agenten-Benutzer über unseren Verzeichnisdienst zu machen, möchte ich das auch für die Kundenbenutzer machen. Leider habe ich da noch ein paar Schwierigkeiten.

Ich habe aus der defaults.pm die entsprechenden Teile in meine config.pm kopiert und gemäß unserer Situation angepaßt, das ganze sieht jetzt so aus:

Code: Select all

$Self->{'Customer::AuthModule'} = 'Kernel::System::CustomerAuth::LDAP';
    $Self->{'Customer::AuthModule::LDAP::Host'} = 'ldapsrv.verwaltung.uni-muenchen.de';
    $Self->{'Customer::AuthModule::LDAP::BaseDN'} = 'ou=benutzer,o=uni-muenchen,c=de';
    $Self->{'Customer::AuthModule::LDAP::UID'} = 'mail';
    $Self->{'Customer::AuthModule::LDAP::SearchUserDN'} = 'cn=otrs-proxy,ou=proxy-user,ou=technik,o=uni-muenchen,c=de';
    $Self->{'Customer::AuthModule::LDAP::SearchUserPw'} = '******';
	
    $Self->{'Customer::AuthModule::LDAP::Params'} = {
	port    => 389,
	timeout => 120,
	async   => 0,
	version => 3,
};

# CustomerUser
# (customer user ldap backend and settings)
    $Self->{CustomerUser} = {
        Name => 'LDAP Backend',
        Module => 'Kernel::System::CustomerUser::LDAP',
        Params => {
            # ldap host
            Host => 'ldapsrv.verwaltung.uni-muenchen.de',
            # ldap base dn
            BaseDN => 'ou=Benutzer,o=uni-muenchen,c=de',
            # search scope (one|sub)
            SSCOPE => 'sub',
            # The following is valid but would only be necessary if the
            # anonymous user does NOT have permission to read from the LDAP tree
            UserDN => 'cn=otrs-proxy,ou=proxy-user,ou=technik,o=uni-muenchen,c=de',
            UserPw => '******',
            # in case you want to add always one filter to each ldap query, use
            # this option. e. g. AlwaysFilter => '(mail=*)' or AlwaysFilter => '(objectclass=user)'
            AlwaysFilter => '',
            # if your frontend is e. g. iso-8859-1 and the charset of your
            # ldap server is utf-8, use this options (if not, ignore it)
            SourceCharset => 'utf-8',
            DestCharset => 'iso-8859-1',
            # die if backend can't work, e. g. can't connect to server
            Die => 1,
            # Net::LDAP new params (if needed - for more info see perldoc Net::LDAP)
            Params => {
                port    => 389,
                timeout => 120,
                async   => 0,
                version => 3,
            },
        },
        # customer uniq id
        CustomerKey => 'mail',
        # customer #
        CustomerID => 'mail',
        CustomerUserListFields => ['cn', 'sn', 'mail', 'lmu-stud-matrikelnummer'],
        CustomerUserSearchFields => ['cn', 'mail', 'lmu-stud-matrikelnummer'],
        CustomerUserSearchPrefix => '',
        CustomerUserSearchSuffix => '*',
        CustomerUserSearchListLimit => 250,
        CustomerUserPostMasterSearchFields => ['mail'],
        CustomerUserNameFields => ['givenname', 'sn'],
        # show not own tickets in customer panel, CompanyTickets
        CustomerUserExcludePrimaryCustomerID => 0,
        # add a ldap filter for valid users (expert setting)
        # CustomerUserValidFilter => '(!(description=gesperrt))',
        # admin can't change customer preferences
        AdminSetPreferences => 0,
        # cache time to life in sec. - cache any ldap queris
        CacheTTL => 0,
        Map => [
            # note: Login, Email and CustomerID needed!
            # var, frontend, storage, shown (1=always,2=lite), required, storage-type, http-link, readonly
            [ 'UserSalutation', 'Title',      'title',           1, 0, 'var', '', 0 ],
            [ 'UserFirstname',  'Firstname',  'givenname',       1, 1, 'var', '', 0 ],
            [ 'UserLastname',   'Lastname',   'sn',              1, 1, 'var', '', 0 ],
            [ 'UserLogin',      'Username',   'cn',             1, 1, 'var', '', 0 ],
            [ 'UserEmail',      'Email',      'mail',            1, 1, 'var', '', 0 ],
            [ 'UserCustomerID', 'CustomerID', 'lmu-stud-matrikelnummer',            0, 1, 'var', '', 0 ],
            # [ 'UserCustomerIDs', 'CustomerIDs', 'second_customer_ids', 1, 0, 'var', '', 0 ],
            [ 'UserPhone',      'Phone',      'telephonenumber', 1, 0, 'var', '', 0 ],
            [ 'UserAddress',    'Address',    'postaladdress',   1, 0, 'var', '', 0 ],
            [ 'UserComment',    'Comment',    'description',     1, 0, 'var', '', 0 ],
        ],
    };		
	
Wenn ich jetzt z. B. ein neues Ticket erstelle und im An-Feld einen Benutzernamen bzw. die Matrikelnummer eintippe, schlägt OTRS Benutzer mit zutreffendem (Teil)Kriterium vor. Daraus schließe ich, dass meine Konfiguration nicht ganz falsch sein kann.

Wenn ich aber versuche, mich am Kundenportal anzumelden, erhalte ich die Fehlermeldung:

Code: Select all

Panic! No UserData!!! 
Im Log steht aber:

Code: Select all

[Tue Nov 17 08:56:11 2009][Notice][Kernel::System::CustomerAuth::LDAP::Auth] CustomerUser: m.ludwig@lmu.de (cn=m.ludwig,ou=Benutzer,o=uni-muenchen,c=de) authentication ok (REMOTE_ADDR: 127.0.0.1).
Müssen auch die Daten der Kunden wie die der Agenten in die lokale DB synchronisiert werden? Dafür habe ich in der defaults.pm keinen Beispielcode gefunden.

Über die Kunden-Suche werden die Daten der Kunden auch korrekt angezeigt, aber wenn man einen Kunden anklickt, bleiben die Felder in der "Bearbeiten"-Maske leer. Mir ist natürlich bewußt, dass ich hier nicht bearbeiten kann, weil OTRS nur lesend auf das Directory zugreift, aber warum werden die Informationen nicht angezeigt?
Viele Grüße,
Markus

------------------
Produktiv: OTRS: 2.4.5
OS: Windows Server 2008 R2
Apache2/MySQL
maxbacks
Znuny wizard
Posts: 326
Joined: 30 Jan 2008, 14:59
Znuny Version: 6.0.19
Real Name: Max Hendrik Backs

Kundenlogin /-suche über LDAP-Anbindung

Post by maxbacks »

Du musst den UserSync noch eintragen!

Code: Select all

     AuthSyncModule::LDAP::UserSyncMap
     (map if agent should create/synced from LDAP to DB after successful login)
    $Self->{'AuthSyncModule::LDAP::UserSyncMap'} = {
        # DB -> LDAP
        UserFirstname => 'givenName',
        UserLastname  => 'sn',
        UserEmail     => 'mail',
    };

Die Userdaten müssen in der DB stehen. Mit dem Usersync wird automatisch ein Datensatz für den jeweiligen Benutzer angelegt, wenn dieser sich authentifiziert hat.
Ticket-System
Ubuntu 18.04
OTRS 6.0.19
NiteFlame
Znuny newbie
Posts: 23
Joined: 26 Jan 2006, 15:57

Kundenlogin /-suche über LDAP-Anbindung

Post by NiteFlame »

Hallo und vielen Dank für die schnelle Antwort.

Den UserSync habe ich weiter oben in meiner config.pm bereits eingetragen, dort, wo ich den Login für die Agenten über das Directory konfiguriert habe. Das sieht bei mir wie folgt aus:

Code: Select all

    $Self->{'AuthSyncModule'} = 'Kernel::System::Auth::Sync::LDAP';
    $Self->{'AuthSyncModule::LDAP::Host'} = 'ldapsrv.verwaltung.uni-muenchen.de';
    $Self->{'AuthSyncModule::LDAP::BaseDN'} = 'ou=iiia4,ou=admins,o=uni-muenchen,c=de';
    $Self->{'AuthSyncModule::LDAP::UID'} = 'uid';
    $Self->{'AuthSyncModule::LDAP::SearchUserDN'} = 'cn=otrs-proxy,ou=proxy-user,ou=technik,o=uni-muenchen,c=de';
    $Self->{'AuthSyncModule::LDAP::SearchUserPw'} = '******';
	$Self->{'AuthSyncModule::LDAP::UserSyncMap'} = {
	# DB -> LDAP
	UserFirstname => 'givenName',
	UserLastname  => 'sn',
	UserEmail     => 'mail',
	};

    $Self->{'AuthSyncModule::LDAP::Params'} = {
	port    => 389,
	timeout => 120,
	async   => 0,
	version => 3,
	};		
	$Self->{'AuthSyncModule::LDAP::UserAttr'} = 'DN';

	# UserTable
    $Self->{DatabaseUserTable}       = 'users';
    $Self->{DatabaseUserTableUserID} = 'id';
    $Self->{DatabaseUserTableUserPW} = 'pw';
    $Self->{DatabaseUserTableUser}   = 'login';

Weil im Kommentar dazu

Code: Select all

 (map if agent should create/synced from LDAP to DB after successful login)
steht, bin ich davon ausgegangen, dass dieser Teil nur für die Agenten gilt. Ein Pendant mit CustomerSyncModule o. Ä. konnte ich nicht finden.

Gibt es noch eine andere Fehlerquelle?
Viele Grüße,
Markus

------------------
Produktiv: OTRS: 2.4.5
OS: Windows Server 2008 R2
Apache2/MySQL
NiteFlame
Znuny newbie
Posts: 23
Joined: 26 Jan 2006, 15:57

Kundenlogin /-suche über LDAP-Anbindung

Post by NiteFlame »

Wenn ich das richtig sehe (meine LDAP-Kenntnisse sind eher rudimentär), so könnte das Problem darin resultieren, dass Agenten und Kunden in unterschiedlichen Containern des Directories sind.

Vermutlich wird es nicht funktionieren, wenn ich den gleichen Code zwei Mal in die config.pm schreibe, oder?

Wie kann man hier vorgehen, damit beide Container bei der Synchronisation berücksichtigt werden?
Viele Grüße,
Markus

------------------
Produktiv: OTRS: 2.4.5
OS: Windows Server 2008 R2
Apache2/MySQL
jojo
Znuny guru
Posts: 15020
Joined: 26 Jan 2007, 14:50
Znuny Version: Git Master
Contact:

Kundenlogin /-suche über LDAP-Anbindung

Post by jojo »

Kunden werden nicht gesynct.

Ansonsten bitte mal in die defaults.pm schauen und die Forensuche bzgl. LDAP bemühen
"Production": OTRS™ 8, OTRS™ 7, STORM powered by OTRS
"Testing": ((OTRS Community Edition)) and git Master

Never change Defaults.pm! :: Blog
Professional Services:: http://www.otrs.com :: enjoy@otrs.com
messallr
Znuny newbie
Posts: 1
Joined: 20 Nov 2009, 14:42
Znuny Version: 2.4.5

Kundenlogin /-suche über LDAP-Anbindung

Post by messallr »

Hallo,

wir haben folgendes Problem mit der LDAP-Anbindung.
Die Suche nach Kunden funktioniert nicht, und im otrs.log erscheint nur folgender Fehler.:

[Fri Nov 20 13:51:04 2009][Error][Kernel::System::CustomerUser::LDAP::CustomerSearch][336] Bad filter

Ist dieser Filter damit gemeint?: AlwaysFilter => 'objectclass=user',
Habt Ihr einen Tipp für mich?
Die Anmeldung für Agenten mit LDAP funktioniert ohne Probleme.

Vielen Dank!
OTRS 2.4.5
Windows 2003 Server
Locked