Active Directory / LDAP

Help
lorus
2012-03-21
2013-04-30
  • lorus
    lorus
    2012-03-21

    Hallo Zusammen,

    kann mir bitte jemand erklären, was genau ich in der config eintragen muss, um eine Authentifizierung an einer AD-Domäne zu realisieren. Eine kleine Beispiel-Konfiguration würde mir sehr helfen.

    Vielen Dank im Vorraus.

    Grüße Lorus

     
  • Anton Kejr
    Anton Kejr
    2012-03-22

    Hi Lorus,

    wie in der ausgelieferten config.php beschrieben:

    * - LDAP schema attributes : uid, givenName and sn (the standard attributes in each official schema)
        *   Search by uid = The username in openTimetool   
        */
        #$config->auth->method       =   'LDAP';
        #$config->auth->url          =   'ldap://<your_ldap.host.com>/<your_basedn>';
        #$config->auth->digest       =   'md5';
        #$config->auth->savePwd      =   false;  // password fields hidden

    Den Servernamen und die BaseDN muss Dir Dein Admin sagen und die o.g. Attribute müssen im AD-Schema enthalten sein. Sollte zwar, aber sicher ist es nicht. LDAP/AD ist da reichlich offen und wenig wirklich festgelegt.

    Falls Du nicht weiter kommst, versuche mal in includes/auth/LDAP-php zu debuggen.

    Viel Erfolg

    Toni

     
  • rhunter
    rhunter
    2012-06-27

    Hallo,

    ich hätte da noch eine Frage, da mein AD keine anonyme Authentisierung zulässt (Standard ab Windows Server 2003):
    Wo übergebe ich die Credentials für's LDAP-Bind?

    Vorab schonmal vielen Dank für eure Hilfe!

    Gruß Rick

     
  • Anton Kejr
    Anton Kejr
    2012-06-27

    Hi Rick,

    das tut mir leid. Derzeit ist nur anonymous bind realisiert.

    Aber Du kannst als schnellen Workaround Deine Credentials in includes/Auth/LDAP.php fest eintragen und aus dem anonymous bind ein bind mit Deinen Zugangsdaten machen :

    Suche die Zeile mit
            if ((@ldap_bind($this->conn_id)) == false) {
    In der aktuellen version auf Line 314 und ändere die so ab:
            if ((@ldap_bind($this->conn_id,ADMINID,ADMINPWD)) == false) {

    Schon meldest Du Dich am AD mit ADMINID/ADMINPWD an.

    Vgl : http://www.php.net/manual/de/function.ldap-bind.php

    Baue ich in die nächste Version mit ein. Danke für die Anregung.

    Viel Erfolg

    Toni

     
  • rhunter
    rhunter
    2012-06-27

    Hallo und vielen Dank für die schnelle Antwort!

    Nur leider klappt das nicht so ganz. Egal was ich als ADMINID und ADMINPWD verwende, ich bekomme immer den Fehler "Error binding anonymously to LDAP."

    Getestet habe ich "user@domain", "domain\user" und sogar den kompletten Pfad im AD zum User: 'UID=User, OU=Benutzer, OU=Domainname, DC=firma, DC=de' (Vgl. http://www.php.net/manual/de/function.ldap-bind.php#105620), jeweils mit Passwort - Leider ohne Erfolg.

    Interessant finde ich, dass immer die gleiche Fehlermeldung zurückkommt und nicht ein Authentisierungsfehler auf Grund falscher Zugangsdaten…

    Dass prinzipiell die LDAP-Abfrage bei uns funktioniert weiß ich sicher, da ich vor wenigen Tagen eine Mediawiki mit LDAP-Authentisierung eingerichtet habe.

    Was könnte ich hier noch ausprobieren?

    Vorab vielen Dank für die Mühe!

    Gruss Rick

     
  • Anton Kejr
    Anton Kejr
    2012-06-27

    Hi Rick,

    dass immer die gleiche Fehlermeldung kommt, wundert mich nicht wirklich ;-). Die Fehlermeldung kommt aus dem oTt-Code:
            if ((@ldap_bind($this->conn_id)) == false) {
                return new PEAR_Error('Error binding anonymously to LDAP.', 41, PEAR_ERROR_DIE);
            }

    Schreib dort Guglhupf rein und es kommt die Meldung "Guglhupf".

    ldap_bind geht mit Deinen Credentials auf Fehler. Mehr sagt die Meldung nicht aus.

    Versuchs mal mit
            if ((@ldap_bind($this->conn_id,ADMINID,ADMINPWD)) == false) {
                echo ldap_error($this->conn_id);
                return new PEAR_Error('Error binding anonymously to LDAP.', 41, PEAR_ERROR_DIE);
            }

    Nach dem PHP-Handbuch sollte ldap_error den tatsächlich vom Ldap-Server erzeugten Fehlertext zurückmelden. Ok ?

    Viele Grüße

    Toni

     
  • rhunter
    rhunter
    2012-06-27

    Hallo,

    leider bekomme ich keine Ausgabe des Fehlers. Es bleibt bei der einen Zeile "Error binding anonymously to LDAP."
    Warum auch immer.
    Auch die Standard Log-Files vom Apache (error_log, access_log und php_log) zeigen nichts.

    Ich ahne schon, dass die Sache sich noch etwas hinziehen wird… ;-)

    Gruss Rick

     
  • Anton Kejr
    Anton Kejr
    2012-06-27

    Das ist jetzt aber eher PHP-Nachhilfe, Rick ;-) …

    Versuchs mal so : return new PEAR_Error('Error binding to LDAP.'.ldap_error($this->conn_id), 41, PEAR_ERROR_DIE);

     
  • rhunter
    rhunter
    2012-06-27

    Ich weiss, nur habe ich mit PHP normalerweise nichts zu tun. Ich werde mich in den nächsten Tagen mal mit unserem Webentwickler unterhalten… ;-)

    Ich habe auch anfangs Deinen Workaround an der falschen Stelle in der LDAP.php eingetragen. Da ich nur mit dem vi die Files editiere habe ich nicht gesehen, dass ich in einem auskommentierten Block rumbastele… (Schande über mich!)

    Leider hat mich das Eintragen der Credentials an der richtigen Stelle auch nicht viel weiter gebracht:
    Gebe ich nun die (meiner Meinung nach) richtigen Credentials ein (DOMAIN\User, PASSWD) bekomme ich einen Error 500 vom Webserver zurück (Seite nicht gefunden). Verändere ich die Schreibweise der Credentials oder nehme sie wieder heraus, bekomme ich den ldap_error "Can't contact LDAP server".

    Mal sehen, was der Webentwickler spricht…

    Danke und Gruss Rick

     
  • Anton Kejr
    Anton Kejr
    2012-06-29

    Hi Rick,

    bin auch gespannt, was Dein Entwickler rausfindet. Bitte gib uns Rückmeldung über die Ergebnisse. Ich würde sie dann gerne in das Produkt übernehmen.

    Viele Grüße und schon mal Danke

    Toni