per PHP gegen LDAP authentifizieren

NightMare

Zuccalmaglios Renette
Registriert
09.11.04
Beiträge
263
Hallo zusammen,
ich würde gerne per php einen ldap-server anrufen und dann einen user daran authentifizieren... soviel ich ghört / gelesen habe sollte dies ohne probleme gehen... hat jemand schon ein script für das? :eek:

gruss nightmare
 

NightMare

Zuccalmaglios Renette
Registriert
09.11.04
Beiträge
263
Super danke!
Der untere Link hat mir sehr weitergeholfen...

gruss nightmare
 

NightMare

Zuccalmaglios Renette
Registriert
09.11.04
Beiträge
263
okay, ich habs probiert und probiert aber ich komme einfach nicht weiter.. :( ist jemand hier der mir weiterhelfen kann betreffend php und ldap? biiiiitte... bin am verzweifeln...

thx&gruss nightmare
 

csharp

Gast
Wenn du dein Problem etwas genauer erklärst kann ich dir bestimmt helfen.
 
  • Like
Reaktionen: NightMare

NightMare

Zuccalmaglios Renette
Registriert
09.11.04
Beiträge
263
Juhuuuui! :-D
Also, ich habe eine website und möchte dass sich die user am ldap-server identifizieren können. ich habe nun mit viel mühe das skript erstellt, sodass ich den user überprüfen kann (mit name und passwort). nun möchte ich aigentlich wissen noch wissen ob der user in der gruppe "Lehrteam" ist, so dass ich ihm dann gewisse funktionen erlauben kann / oder eben nicht...

Mein Skript:
Code:
$ldap_server		= "ldap://10.72.6.242";
								
if($connect=ldap_connect($ldap_server)){ // if connected to ldap server
					
if (ldap_set_option($connect, LDAP_OPT_PROTOCOL_VERSION, 3)) {
	echo "version 3<br>\n";
} else {
	echo "version 2<br>\n";
}
		   
echo "verification on '$ldap_server': ";
			
$ldap_user		= "uid=jojo,cn=users,dc=serverinfo1,dc=local";
$ldap_pw		= "xxx";
		
if(($ds=ldap_bind($connect, $ldap_user, $ldap_pw)) == false){
	print "bind:__FAILED__<br>\n";
      return false;
}
else{
	print "GRANTED";
}
}
echo "<br><br>";


danke für deine angebotene hilfe!
gruss nightmare
 

csharp

Gast
Out of the box ist mir keine Methode ismemberOf oder dergestalt bekannt.
Selbst coden, oder noch besser mal in PEAR suchen, habe auf Anhieb das hier gefunden:

http://pear.php.net/package/Net_LDAP

Wobei ich diese Klasse nicht kenne, scheint aber der Beschreibung nach das zu sein was du suchst.
 

NightMare

Zuccalmaglios Renette
Registriert
09.11.04
Beiträge
263
Na das is ja super... :-D

Herzlichen Dank! :-* Das hilft mir mal wirklich weiter...
Werde aber wohl zu gegebener Zeit selber was coden...

gruss nightmare
 

NightMare

Zuccalmaglios Renette
Registriert
09.11.04
Beiträge
263
Gibt es einen Grund warum Du das nicht den Webserver machen läßt?

öhm, wie soll das gehen? der user ruft die seite auf und hat ein login-fenster.. er gibt seine angaben an und wird dann identifiziert und kann nun gewisse einstellungen an der homepage vornehmen.. wüsste nicht wie das anderst gehen soll?! bin aber offen für infos... ;)

gruss nightmare
 

NightMare

Zuccalmaglios Renette
Registriert
09.11.04
Beiträge
263
Zum Auslesen beliebiger Daten aus dem LDAP dient die Funktion ldap_search:
http://de3.php.net/manual/de/function.ldap-search.php

Damit könntest die Mitglieder der Gruppe "Lehrteam" auslesen und dann vergleichen, ob der User in der Zurückgegebenen Liste enthalten ist.

jop diese funktion habe ich auchschon gefunden und habe mir dn und so weiter ausgeben lassen... wenn du mir etzt sagen kannst mit welchem param ich die gruppen auslesen kann würde ich dir am liebsten um den hals fallen... :-D

gruss nightmare

die suche sieht zur Zeit so aus:
Code:
$person	= "jojo";
			
$dn 		= "dc=serverinfo1,dc=local";
$filter		="(|(sn=$person*)(vorname=$person*))";
$justthese 	= array( "ou", "sn", "vorname", "dn");
							
$sr			= ldap_search($connect, $dn, $filter, $justthese);
								
$info 		= ldap_get_entries($connect, $sr);
								
print $info["count"]." gefundene Einträge<p>";
 

tjp

Altgelds Küchenapfel
Registriert
07.07.04
Beiträge
4.057
öhm, wie soll das gehen?
Das Auth Modul für apache verwenden und die Webseiten und/oder die virtuelle Website gegen LDAP authentifizieren. In PHP sind dann die Nutzer bereits authentifiziert. Das ist das übliche Vorgehen, wenn man komplette Seiten blocken will, weil es keine PHP-Angriffe auf den Code der Webseite möglich sind. Was Du letztlich verwendest hängt davon ab, was Du tun willst.
 

tjp

Altgelds Küchenapfel
Registriert
07.07.04
Beiträge
4.057
jop diese funktion habe ich auchschon gefunden und habe mir dn und so weiter ausgeben lassen... wenn du mir etzt sagen kannst mit welchem param ich die gruppen auslesen kann würde ich dir am liebsten um den hals fallen... :-D

gruss nightmare

die suche sieht zur Zeit so aus:
Code:
$person	= "jojo";
			
$dn 		= "dc=serverinfo1,dc=local";
$filter		="(|(sn=$person*)(vorname=$person*))";
$justthese 	= array( "ou", "sn", "vorname", "dn");
							
$sr			= ldap_search($connect, $dn, $filter, $justthese);
								
$info 		= ldap_get_entries($connect, $sr);
								
print $info["count"]." gefundene Einträge<p>";

Nein, nein so macht man das nicht!

Für Benutzeraccounts gibt es das attribut "uid", damit das funktioniert müssen Einträge von Typ inetOrPerson oder davon abgeleiteter Klassen sein. Mehrfachvererbung durch hinzufügen weiterer Klassen ist möglich.

Wenn Du Personen in einer Gruppe zusammenfassen willst nimmst in diesem Fall am besten "GroupOfUniqueNames". GroupOfUniqueNames verlangt, daß es mindestens ein Mitglied gibt, d.h. uniqueMember='ldap_dn_einfügen'.

Beispiel
Code:
dc=de
  dc=apfeltalk
    cn=MyGroup
     |uniqueMember:'uid=foo,ou=user,dc=apfeltalk,dc=de'
  ou=user
     uid=foo
     |objectClass:top
     |objectClass:person
     |objectClass:inetOrgPerson
     |uid:foo
     | ...

Der passende Suchfilter
&(objectClass=inetOrgPerson)(uid='uid_string')
oder
&(objectClass=*)(uid='uid_string')

Du bindest zum Suchen an den LDAP-Server an dem Punkt an, ab den Du im DIT suchen willst. Nicht vergessen SUBTREE als Suchbefehl, nur wenn Du wirklich weißt, das es keinen SUBTREE gibt kannst Du nur auf einem bestimmten Knoten im Baum suchen.
 

tjp

Altgelds Küchenapfel
Registriert
07.07.04
Beiträge
4.057
Nein, nein so macht man das nicht!
Bleibt noch zu ergänzen, daß man zum Überprüfen eines Accounts auf einem LDAP-Server sinnigerweise mit den Credentials des Nutzer auf den LDAP-Server sich verbindet.

Du sucht mit der vorher beschrieben Methode den passenden dn zur vorgegebenen uid (schlägt die Suche fehl, dann gibt es gar keinen Nutzer), dann verbindest Du Dich mit der dn und dem Passwort auf den LDAP-Server, schlägt die Verbindung fehl, dann ist das Passwort falsch.

Die Methode funktioniert immer, weil für einen normalen Nutzer es auf einem LDAP-Server nicht unbedingt erlaubt ist sein eigenes Passwort auszulesen, aber man kann sich gegen den LDAP-Server authentifizieren.
 

mcjojo

Morgenduft
Registriert
18.02.06
Beiträge
171
Ich kenne mich mit PHP nicht so aus, aber grob sollte es ungefähr so gehen:
Also angenommen, Du hast eine Gruppe "cn=Lehrteam,ou=Group,dc=apfeltalk,dc=de",
dann sollten die Mitglieder im Multivaluefeld "uniqueMember" stehen (siehe Post von tjp)

Dann holst Du Dir mit ldap_search die Gruppe

Code:
$dn 		= "ou=Group,dc=apfeltalk,dc=de";
$filter		="(cn=Lehrteam)";
$justthese 	= array( "uniqueMember");
							
$sr			= ldap_search($connect, $dn, $filter, $justthese);

Dann kannst Du mit ldap_first_entry über das ergebnis laufen bzw. wenn man so gezielt sucht, sollte es ja nur einen Treffer geben. Mit ldap_get_values kann man dann die Werte aus dem MultiValue-Feld lesen

Code:
$entry = ldap_first_entry($ds, $sr);
$values = ldap_get_values($ds, $entry, "uniqueMember");

Dann hast Du in $values eine Liste mit den Mitgliedern der Gruppe in der Form
'uid=foo,ou=user,dc=apfeltalk,dc=de'
'uid=foo2,ou=user,dc=apfeltalk,dc=de'
... etc.

In dieser Liste suchst Du dann nach der gewünschten UID des Users
 

NightMare

Zuccalmaglios Renette
Registriert
09.11.04
Beiträge
263
wow das is ne krasse antwort... :)
genau sowas hab ich mir gewünscht! nur leider erhalte ich diese Ausgabe:
Warning: ldap_get_values(): Cannot get the value(s) of attribute Decoding error in

Ich wüsste aber nicht was ich no ändern könnte... Ich habe deine Suchfunktion auchschon mit meiner gepaart versucht... Dabei zeigt er mir schön an, dass es die Gruppe "Lehrteam" gibt und den dn dazu auch... Nur keine uniqueMember.. :eek: die spuckt er irgendwie nicht aus...

gruss nightmare