[PHP] LDAP Zugriff, eDirectory

Kantholy

Lt. Junior Grade
Registriert
Aug. 2006
Beiträge
323
Hi Leute, ich veruche gerade etwas exotisches, und zwar: Ich hab für die Firma ein paar Webapplikationen geschrieben die einen Login benötigen, so, bis jetzt benutzen diese aber ALLE ein seperates Login auf Basis einer Datenbank... so, jetzt hatte ich vor das ganze per eDirectory zu authentifizieren, weil es gibt in der php.ini ein ladbares modul namens php_ldap.dll

(Jop, ich benutz Apache für Windoof, Scheiss Konzernrichtline)

Nun ja, jetzt hab ich bei php.net weitergeguckt wie das ganze funktioniert, Verbindung zum LDAP Server, LDAP Suche, etc. etc.

unter anderem kann man sich quasi authentifizieren mit dem Befehl ldap_bind($ldapserver, $user, $pwd);


so, ich bin also hergegangen und hab mal was aufgesetzt, hier der Inhalt meiner ldap_login.php

PHP:
<?
function checkUser ($username,$passwort)
 {
   $ldapserver = 'ldap://10.150.40.63';
   $ds=ldap_connect($ldapserver);
   if ($ds)
    {
      $r=ldap_bind($ds,$username,$passwort); 
       if ($r)
        {
          return true;
        }
       else
        {
          return false;
        }
     }
 }
 
 
if(checkUser("Admin3", "PASSWORT"))
echo "funzt!";
else
echo "funzt net!";
?>

so, was gibt mir mein Browser aus:

Code:
Warning: ldap_bind() [function.ldap-bind]: Unable to bind to server: Confidentiality required in C:\xampp\htdocs\ldap_login.php on line 8
funzt net!

so, dieses Confidentiality required hat mich darauf gebracht ein wenig weiter zu suchen, bei php.net steht desweiteren, dass man ldaps:// benutzen kann/soll... funzt aber nicht...

so, jetzt hab ich nen Blogeintrag gefunden: http://www.welt-held.de/401-php-und-eine-ldap-verbindung-uber-ssl.html

indem steht ich solle in C:\openldap\sysconf eine ldap.conf erstellen mit dem Inhalt
Code:
TLS_REQCERT never

funzt aber immer noch nicht, hat jemand Ideen oder gar Erfahrung mit diesem Thema?
Wäre sehr froh über jede Antwort :-)
 
Hallo,

das sieht so aus als ob dein Script den Benutzernamen nicht weitergibt und du dich versuchst anonym am ldap anzumelden.

Gib mal die Username/PW im Script selber aus.

LDAPS würde ich erstmal nicht machen, da brauchste nen Zertifikat das du erst einbinden müsstest.

Hier mal ein Script was geht:

[CODE<?php
// LDAP variables
$ldap[‘user’] = ‘uname’;
$ldap[‘pass’] = ‘password’;
$ldap[‘host’] = ‘ldap.example.com’;
$ldap[‘port’] = 389;
$ldap[‘dn’] = ‘cn’.$ldap[‘user’].’,ou=Department,o=Company Name’;
$ldap[‘base’] = ‘’;

// connecting to ldap
$ldap[‘conn’] = ldap_connect( $ldap[‘host’], $ldap[‘port’] )
or die( “Could not connect to {$ldap[‘host’]}” );

// binding to ldap
$ldap[‘bind’] = ldap_bind( $ldap[‘conn’], $ldap[‘dn’], $ldap[‘pass’] );

?>
[/CODE]

Wichtig ist auch wie du siehst der Basissuchpfad also "DN".
 
Zuletzt bearbeitet: (Fehler gefunden)
also, nachdem ich erstmal alle Anführungszeichen ersetzen musste und unten mal bissl erweitert hab, kam ich zu dem Ergebnis:
PHP:
<?php
// LDAP variables
$ldap['user'] = 'Admin3';
$ldap['pass'] = 'weißkeiner!';
$ldap['host'] = '10.150.40.63';
$ldap['port'] = 389;
$ldap['dn'] = 'cn'.$ldap['user'].',ou=CVO,o=SCH';
$ldap['base'] = ‘’;

// connecting to ldap
$ldap['conn'] = ldap_connect( $ldap['host'], $ldap['port'] )
or die( "Could not connect to {$ldap['host']}" );

// binding to ldap
$ldap['bind'] = ldap_bind( $ldap['conn'], $ldap['dn'], $ldap['pass'] );
if($ldap['bind'])
echo "funzt!";
else
echo "funzt net!";
?>

Return Message:

Warning: ldap_bind() [function.ldap-bind]: Unable to bind to server: Confidentiality required in C:\xampp\htdocs\ldap_cb.php on line 15
funzt net!
 
Hallo Kant-holz,

probier es mal so. Im Moment ist die BindDN definitiv falsch, da fehlt ein = zwischen CN und dem Nutzernamen. Gegen was für ein Verzeichnis checkst Du denn? Da es eine Windows Umgebung ist, tippe ich mal auf eine ADS oder einen Exchange, oder? Im Falle der ADS fehlen aber noch die DC Angaben in der BindDN. Die musst Du in diesem Falle noch eintragen, der Suchpfad muss stimmen, sonst findet der den Nutzer nicht. Auch wäre der Port dann nicht 389 sondern 3268.

PHP:
<?php
    // LDAP variables
    $ldap['user'] = 'Admin3';
    $ldap['pass'] = 'weißkeiner!';
    $ldap['host'] = '10.150.40.63';
    $ldap['port'] = 389;   // use 3268 in case of Active Directory
    $ldap['dn'] = 'cn='.$ldap['user'].',ou=CVO,o=SCH';
    $ldap['base'] = '';

    // connecting to ldap
    $ldap['conn'] = ldap_connect( $ldap['host'], $ldap['port'] )
        or die( "Could not connect to {$ldap['host']}" );

    // binding to ldap
    $ldap['bind'] = ldap_bind( $ldap['conn'], $ldap['dn'], $ldap['pass'] );
    if($ldap['bind'])
        echo "funzt!";
    else
        echo "funzt net!";
?>


Ich hoffe, das hilft dir ein wenig.

Ciao
 
Zurück
Oben