LDAP - Bind funktioniert nicht
Will auf AD-Server zugreifen; Admin-Rechte vorhanden; LDAP_Connect() erfolgreich; Bind: "Invalid Credentials"
Hallo
ich versuche gerade per PHP-Script auf die AD über das Intranet (von einem Testserver: ISS, PHP5) zuzugreifen.
Wenn ich lediglich ldap_connect() mache meldet mir ldap_errors "success". Will ich dann an den Server binden kommt die Meldung "Invalid Credentials".
Ich habe Admin-Rechte auf die AD und komme über RDC problemlos auf den Server.
Die Struktur der Test-AD sieht folgendermaßen aus:
Domain: domain.test
1. OU in domain.test: DE
1. OU in DE: Standort
1. OU in Standort: Users
Hat jemand eine Idee, woran das liegt (denke mal an dem Domain-OU-Pfad); hab auch schon Beispielklassen für die Verbindung verwendet, aber ging alles irgendwie nicht.
Vielen Dank und Grüße,
Dirk
Änderungen:
Hab den Code in einen Codeblock gepackt
masterG(Moderator) 19.06.2007
Hallo
ich versuche gerade per PHP-Script auf die AD über das Intranet (von einem Testserver: ISS, PHP5) zuzugreifen.
Wenn ich lediglich ldap_connect() mache meldet mir ldap_errors "success". Will ich dann an den Server binden kommt die Meldung "Invalid Credentials".
Ich habe Admin-Rechte auf die AD und komme über RDC problemlos auf den Server.
Die Struktur der Test-AD sieht folgendermaßen aus:
Domain: domain.test
1. OU in domain.test: DE
1. OU in DE: Standort
1. OU in Standort: Users
Hat jemand eine Idee, woran das liegt (denke mal an dem Domain-OU-Pfad); hab auch schon Beispielklassen für die Verbindung verwendet, aber ging alles irgendwie nicht.
// LDAP variables
$ldap['user'] = 'ldapUser';
$ldap['pass'] = 'ldapPass';
$ldap['host'] = '00.00.00.00';
$ldap['port'] = 389;
$ldap['dn'] = 'cn='.$ldap['user'].',ou=Users,ou=Standort,dc=domain,dc=test';
$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'] );
echo ldap_error($ldap['conn']);
Dirk
Änderungen:
Hab den Code in einen Codeblock gepackt
masterG(Moderator) 19.06.2007
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 61739
Url: https://administrator.de/contentid/61739
Ausgedruckt am: 23.11.2024 um 16:11 Uhr
8 Kommentare
Neuester Kommentar
HI..
Also erstens solltest du schauen, dass deine Verbindung zur LDAP DB überhaupt funktioniert.
Am besten mit:
Nun wenn das funktioniert, kannst du weiter mit Filter und der Funktion ldap_search(), ldap_sort() und ldap_get_entries() arbeiten.
Liebe Grüsse
Goran
[EDIT 19.06.2007]
Hab den Code in einen Codeblock gepackt!
masterG(Moderator)
Also erstens solltest du schauen, dass deine Verbindung zur LDAP DB überhaupt funktioniert.
Am besten mit:
// LDAP Konfiguration
$ldapadmin = "user@domain-name"; //Admin-Abfragebenutzer
$ldapadminpw = ""; //Admin-Passwort
$ds = "testserver1"; //LDAP-Server
$dn = "ou=Ordner,dc=google,dc=ch"; //LDAP-Root OU
$ldapport = 389; //LDAP-Port
// LDAP Verbindung aufbauen
$ldapconn = ldap_connect($ds, $ldapport)or die("Could not connect to LDAP server.");
// Verbindungs-Test
if ($ldapconn)
{
// LDAP Bind herstellen
ldap_set_option($ldapconn, LDAPPT_PRTCL_VERSIN,3);
ldap_set_option($ldapconn, LDAPPT_REFERRALS,0);
$ldapbind = ldap_bind($ldapconn, $ldapadmin, $ldapadminpw);
// Authorisierungs-Test
if ($ldapbind)
{
echo "cool";
} else {
echo "nicht cool";
}
Nun wenn das funktioniert, kannst du weiter mit Filter und der Funktion ldap_search(), ldap_sort() und ldap_get_entries() arbeiten.
Liebe Grüsse
Goran
[EDIT 19.06.2007]
Hab den Code in einen Codeblock gepackt!
masterG(Moderator)
Hallo nochmal,
also: War mein Fehler, da ich ausversehen,
statt benutzer@domain.test nur benutzer als
Benutzername verwendet habe. In VBScript ging
das, deshalb war ich der Meinung, daß
es auch in PHP gehen würde...
Also das binden funktioniert jetzt schon
mal. Was ich jetzt aber noch lösen
muß (dachte, daß sich das mehr
oder weniger ergeben würde, wenn der
Login klappt):
Das ganze soll als Autentisierung für
bestimmte Bereiche des Intranet benutzt
werden. Nun sollen aber z.B. nur die Leute,
die in der Netzwerker- und die, die in der
Softwaregruppe sind (bei der Abfrage
müßte ich irgendwie vermerken, in
welcher Gruppe der Login-User ist). Wie kann
ich das denn aus den Gruppen auslesen/test?
Geht das irgendwie?
Danke und Grüße,
Dirk
also: War mein Fehler, da ich ausversehen,
statt benutzer@domain.test nur benutzer als
Benutzername verwendet habe. In VBScript ging
das, deshalb war ich der Meinung, daß
es auch in PHP gehen würde...
Also das binden funktioniert jetzt schon
mal. Was ich jetzt aber noch lösen
muß (dachte, daß sich das mehr
oder weniger ergeben würde, wenn der
Login klappt):
Das ganze soll als Autentisierung für
bestimmte Bereiche des Intranet benutzt
werden. Nun sollen aber z.B. nur die Leute,
die in der Netzwerker- und die, die in der
Softwaregruppe sind (bei der Abfrage
müßte ich irgendwie vermerken, in
welcher Gruppe der Login-User ist). Wie kann
ich das denn aus den Gruppen auslesen/test?
Geht das irgendwie?
Danke und Grüße,
Dirk
Damit du das hinkriegst,
musst du im Filter einen User definieren, dessen Gruppenangehörigkeiten auslesen, und diese Auf die Gewünschte Gruppe überprüfen.
$filter = "(&(|(objectClass=user)(objectClass=contact))(objectCategory=person)(samaccountname=".$userid."))";
$fields = array("memberof");
$sr = ldap_search($ldapconn, $dn, $filter, $fields);
$data = ldap_get_entries($ldapconn, $sr);
Nun solltest du in $data["memberof"] die Liste aller Gruppen dessen der Benutzer angehört haben.
Lg.
Hi Dirk
Wegen dem Filter:
smaaccountname steht für den effektiven LOGIN-Namen (Der Anmeldename beim Logon)
Hier findest du die Feldbezeichnungen von ADS Objekten:
http://www.faq-o-matic.net/content/view/60/45/
Wegen deiner Frage betreffend den Gruppen.
Du hast geschrieben: "Und zwar liest er mir die Benutzer nur dann aus, wenn ich ihn bei mid. 2".
Mit diesem Vorgehen liest du ja keine Benutzer aus, sondern nur die Gruppen des Benutzers.
Lg.
Wegen dem Filter:
$filter = "(&(|(objectClass=user)(objectClass=contact))(objectCategory=person)(samaccountname=".$userid."))";
Hier findest du die Feldbezeichnungen von ADS Objekten:
http://www.faq-o-matic.net/content/view/60/45/
Wegen deiner Frage betreffend den Gruppen.
Du hast geschrieben: "Und zwar liest er mir die Benutzer nur dann aus, wenn ich ihn bei mid. 2".
Mit diesem Vorgehen liest du ja keine Benutzer aus, sondern nur die Gruppen des Benutzers.
Lg.