Top-Themen

Aktuelle Themen (A bis Z)

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

PHP LDAP Login Gruppen Abfrage

Frage Entwicklung PHP

Mitglied: schneerunzel

schneerunzel (Level 1) - Jetzt verbinden

18.02.2015, aktualisiert 23.02.2015, 1248 Aufrufe, 7 Kommentare

Hallo Zusammen

ich habe dieses PHP Script:
01.
if (isset($_POST['btnLogin'])){ 
02.
	//übergebene Daten speichern 
03.
	$username = $_POST['username']; 
04.
	$password = $_POST['password']; 
05.
	 
06.
	// Daten des LDAP-Servers 
07.
	$domain = 'ou=Users,dc=ldap,dc=fritz,dc=box'; 
08.
	$ldap_server = 'ldap.fritz.box'; 
09.
	 
10.
	// Mit dem LDAP-Server verbinden 
11.
	$ds = @ldap_connect($ldap_server); 
12.
	 
13.
	//Wenn Verbindung erfolgreich ... 
14.
	if ($ds){ 
15.
		//Protokollversion festlegen 
16.
		ldap_set_option($ds, LDAP_OPT_PROTOCOL_VERSION, 3); 
17.
		 
18.
		//Versuche mit den übermittelten Credentials eine Verbindung 
19.
		if (@ldap_bind($ds,'uid='.$username.','.$domain,$password)){ 
20.
                        // Credentials OK, setze Session-Variablen 
21.
                        $_SESSION['login_state'] = true; 
22.
                        $_SESSION['username'] = $username; 
23.
                }else{ 
24.
			// Credentials falsch 
25.
			$errormessage = "Login fehlgeschlagen!"; 
26.
27.
		ldap_close($ds); 
28.
	}else{ 
29.
		echo "Fehler beim Verbinden mit dem LDAP-Server: ".ldap_error($ds); 
30.
31.
}
Dieses Script stammt von einem anderen User aus diesem Forum

Unschwer zu erkennen ist das ich hiermit ein Login gegen LDAP prüfe

Ich würde gerne noch mit aufnehen das sich nur User einer bestimmten Gruppe anmelden dürfen und nicht alle wie es momentan der Fall ist.

Auf der PHP Seite (http://php.net/manual/de/ref.ldap.php) habe ich zwar was gefunden nur leider funktioniert das nicht, bzw wahrscheinlich bin ich nur zu dämlich dazu....

Könnt ihr mir helfen?

Ein paar Infos

ldif der Gruppe
01.
# Suchbereich: base 
02.
# Suchfilter: (objectClass=*) 
03.
# Anzahl Einträge: 1 
04.
05.
# Generated by LDAP Account Manager (http://www.ldap-account-manager.org) on February 18, 2015 3:44 pm 
06.
# Version: 4.4 
07.
 
08.
version: 1 
09.
 
10.
# Eintrag 1: cn=bdv,ou=Groups,dc=ldap,dc=fritz,dc=box 
11.
dn: cn=bdv,ou=Groups,dc=ldap,dc=fritz,dc=box 
12.
cn: bdv 
13.
description: bdv Group 
14.
gidnumber: 10021 
15.
memberuid: max 
16.
memberuid: lisa
Das ganze ist ein openLDAP (kein AD)
Mitglied: schneerunzel
18.02.2015 um 17:19 Uhr
Danke für die Antwort.

Da ich wirklich PHP Leihe bin blick ich da nicht durch. Diese Seite hatte ich auch son gefunden bin aber daran gescheiter
Bitte warten ..
Mitglied: MrXermon
18.02.2015 um 18:50 Uhr
Ich nutze folgende PHP-Funktion in Kombination mit der Windows AD:

01.
function ldap_ingroup($ldap, $user, $grp){ 
02.
        $results = ldap_search($ldap, $GLOBALS['config']['login']['ldap']['base_dn'], '(samaccountname='.$user.')', array("memberof", "primarygroupid")); 
03.
        $entries = ldap_get_entries($ldap, $results); 
04.
        if($entries['count'] == 0) return false; 
05.
        array_shift($entries[0]['memberof']); 
06.
        $gruppen = $entries[0]['memberof']; 
07.
        foreach($gruppen as $gruppe){ 
08.
                $gruppe = str_replace('CN=', '', $gruppe); 
09.
                $gruppe = strstr($gruppe, ',', true); 
10.
                if($gruppe == $grp){ 
11.
                        return true; 
12.
13.
14.
        return false; 
15.
}
Bitte warten ..
Mitglied: schneerunzel
18.02.2015 um 19:12 Uhr
ahhhhh?????
Bitte warten ..
Mitglied: MrXermon
18.02.2015, aktualisiert um 21:34 Uhr
Man könnte das ganze in etwa so umbauen. Ich konnte das Script allerdings nicht testen.

01.
if (isset($_POST['btnLogin'])){ 
02.
	//übergebene Daten speichern 
03.
	$username = $_POST['username']; 
04.
	$password = $_POST['password']; 
05.
	 
06.
	// Daten des LDAP-Servers 
07.
	$domain = 'ou=Users,dc=ldap,dc=fritz,dc=box'; 
08.
	$ldap_server = 'ldap.fritz.box'; 
09.
	$ldap_gruppe_dn = 'cn=bdv,ou=Groups,dc=ldap,dc=fritz,dc=box'; 
10.
	 
11.
	// Mit dem LDAP-Server verbinden 
12.
	$ds = @ldap_connect($ldap_server); 
13.
	 
14.
	//Wenn Verbindung erfolgreich ... 
15.
	if ($ds){ 
16.
		//Protokollversion festlegen 
17.
		ldap_set_option($ds, LDAP_OPT_PROTOCOL_VERSION, 3); 
18.
		 
19.
		//Versuche mit den übermittelten Credentials eine Verbindung 
20.
		if (@ldap_bind($ds,'uid='.$username.','.$domain,$password)){ 
21.
						ldap_search($ldap, $domain, '(uid='.$user.','.$domain.')', array("memberof", "primarygroupid"));  
22.
						$entries = ldap_get_entries($ldap, $results);  
23.
						if($entries['count'] == 0){ 
24.
							// Nutzer nicht bei Suche gefunden 
25.
							$errormessage = "Nutzer nicht gefunden!"; 
26.
						}else{ 
27.
							// Nutzer bei der Suche gefunden + ersten Array Wert löschen (Ist die Anzahl der gefundenen Ergebnisse) 
28.
							array_shift($entries[0]['memberof']);  
29.
							$in_gruppe = false; 
30.
							// Jede Gruppenmitgliedschaft mit der Gruppe von oben vergleichen und ggf. Variable setzen 
31.
							foreach($entries[0]['memberof'] as $gruppe){ 
32.
								if($gruppe == $ldap_gruppe_dn){ 
33.
									$in_gruppe = true; 
34.
35.
36.
							// Verarbeitung des Variablenwertes 
37.
							if($in_gruppe == true){ 
38.
								// Credentials OK, setze Session-Variablen 
39.
                        		$_SESSION['login_state'] = true; 
40.
                        		$_SESSION['username'] = $username; 
41.
							}else{ 
42.
								$errormessage = "Nutzer nicht Mitglied der Gruppe!"; 
43.
44.
45.
 
46.
                }else{ 
47.
			// Credentials falsch 
48.
			$errormessage = "Login fehlgeschlagen!"; 
49.
50.
		ldap_close($ds); 
51.
	}else{ 
52.
		echo "Fehler beim Verbinden mit dem LDAP-Server: ".ldap_error($ds); 
53.
54.
}
Bitte warten ..
Mitglied: schneerunzel
19.02.2015, aktualisiert um 16:49 Uhr
Hallo,

vielen, vielen, vielen Dank für die Antwort!!!

mit ein paar Anpassungen komme ich dann auch ein ganze stück weiter...
Leider funktioniert es noch immer nicht. Es kommt die Meldung "Nutzer nicht Mitglied der Gruppe!"
Probiert habe ich es mit dem User max (siehe unten) und der Gruppe bdv (ebenfalls eine LDIF angehängt)

Seitens PHP habe ich noch:
01.
Warning: array_shift() expects parameter 1 to be array, null given in /srv/bdv/ldap_login.php on line 28 
02.
 
03.
Warning: Invalid argument supplied for foreach() in /srv/bdv/ldap_login.php on line 31
Die Zeilen sind an den Folgenden Text angepasst
01.
if (isset($_POST['btnLogin'])){ 
02.
        //übergebene Daten speichern 
03.
        $username = $_POST['username']; 
04.
        $password = $_POST['password']; 
05.
 
06.
        // Daten des LDAP-Servers 
07.
        $domain = 'ou=Users,dc=ldap,dc=fritz,dc=box'; 
08.
        $ldap_server = 'ldap.fritz.box'; 
09.
        $ldap_gruppe_dn = 'cn=bdv,ou=Groups,dc=ldap,dc=fritz,dc=box'; 
10.
 
11.
        // Mit dem LDAP-Server verbinden 
12.
        $ds = @ldap_connect($ldap_server); 
13.
 
14.
        //Wenn Verbindung erfolgreich ... 
15.
        if ($ds){ 
16.
                //Protokollversion festlegen 
17.
                ldap_set_option($ds, LDAP_OPT_PROTOCOL_VERSION, 3); 
18.
 
19.
                //Versuche mit den übermittelten Credentials eine Verbindung 
20.
                if (@ldap_bind($ds,'uid='.$username.','.$domain,$password)){ 
21.
                                                $results = ldap_search($ds,'dc=ldap,dc=fritz,dc=box', '(uid='.$username.')', array("memberof", "primarygroupid")); 
22.
                                                $entries = ldap_get_entries($ds, $results); 
23.
                                                if($entries['count'] == 0){ 
24.
                                                        // Nutzer nicht bei Suche gefunden 
25.
                                                        $errormessage = "Nutzer nicht gefunden!"; 
26.
                                                }else{ 
27.
                                                        // Nutzer bei der Suche gefunden + ersten Array Wert löschen (Ist die Anzahl der gefundenen Ergebnisse) 
28.
                                                        array_shift($entries[0]['memberof']); 
29.
                                                        $in_gruppe = false; 
30.
                                                        // Jede Gruppenmitgliedschaft mit der Gruppe von oben vergleichen und ggf. Variable setzen 
31.
                                                        foreach($entries[0]['memberof'] as $gruppe){ 
32.
                                                                if($gruppe == $ldap_gruppe_dn){ 
33.
                                                                        $in_gruppe = true; 
34.
35.
36.
                                                        // Verarbeitung des Variablenwertes 
37.
                                                        if($in_gruppe == true){ 
38.
                                                                // Credentials OK, setze Session-Variablen 
39.
                                        $_SESSION['login_state'] = true; 
40.
                                        $_SESSION['username'] = $username; 
41.
                                                        }else{ 
42.
                                                                $errormessage = "Nutzer nicht Mitglied der Gruppe!"; 
43.
44.
45.
 
46.
                }else{ 
47.
                        // Credentials falsch 
48.
                        $errormessage = "Login fehlgeschlagen!"; 
49.
50.
                ldap_close($ds); 
51.
        }else{ 
52.
                echo "Fehler beim Verbinden mit dem LDAP-Server: ".ldap_error($ds); 
53.
54.
}
01.
# Eintrag 1: cn=bdv,ou=Groups,dc=ldap,dc=fritz,dc=box 
02.
dn: cn=bdv,ou=Groups,dc=ldap,dc=fritz,dc=box 
03.
cn: bdv 
04.
description:  
05.
gidnumber: 10021 
06.
memberuid: jhansen 
07.
memberuid: bkopp 
08.
memberuid: hschmidt 
09.
memberuid: max 
10.
objectclass: posixGroup
01.
# Eintrag 1: uid=max,ou=Users,dc=ldap,dc=fritz,dc=box 
02.
dn: uid=max,ou=Users,dc=ldap,dc=fritz,dc=box 
03.
cn: Max Mustermann 
04.
description: Testbenutzer 
05.
gidnumber: 513 
06.
givenname: Max 
07.
homedirectory: /home/max 
08.
loginshell: /bin/bash 
09.
objectclass: posixAccount 
10.
objectclass: inetOrgPerson 
11.
objectclass: organizationalPerson 
12.
objectclass: person 
13.
objectclass: top 
14.
sn: Mustermann1 
15.
st: Schleswig-Holstein 
16.
uid: max 
17.
uidnumber: 10019 
18.
userpassword: {SSHA}vxC9pp48FSoVlPlbyT6/SnpjsOl4ZXk5
Habt Ihr noch eine Idee?
Bitte warten ..
Mitglied: MrXermon
LÖSUNG 21.02.2015, aktualisiert 23.02.2015
Vermutlich passt der Filter in Zeile 21 nicht.

Wenn man die Variable '$entries' nach Zeile 22 ausgibt so kann man sich an den richtigen Wert für den Filter Parameter heran tasten. Sobald der Filter richtig gesetzt ist, werden alle Nutzergruppen, sowie die Anzahl aller Gruppenmitgliedschaften ausgegeben.
Bitte warten ..
Ähnliche Inhalte
PHP
PHP LDAP Login
gelöst Frage von schneerunzelPHP11 Kommentare

Hallo Zusammen, ich brauche eine Website auf der man sich mit seinen LDAP Account anmelden kann und dann eine ...

Windows Server
LDAP in PHP
Frage von pipoomaWindows Server10 Kommentare

Halloo zusammen, ich habe Aufgabe von meinem Chef bekommt und zwar Single Sign-On. Wir entwickeln im Haus einen Portal ...

Entwicklung
OTRS LDAP Gruppen Sync
gelöst Frage von ChontaEntwicklung3 Kommentare

Hallo zusammen, miene OTRS Fragen nehmen kein ende. Die Frage steht auch schon im OTRS Forum aber hier habe ...

Windows Server
LDAP Authentifizierungsproblem bei Gruppen eines AD
gelöst Frage von Monto1Windows Server17 Kommentare

Hallo zusammen, ich lerne mich gerade in LDAP ein, als Test möchte ich den Dokumentenscanner (Der die Benutzer über ...

Neue Wissensbeiträge
Internet

Was nützt HTTPS, wenn es auch von Phishing Web-Seiten genutzt wird

Information von Penny.Cilin vor 2 TagenInternet17 Kommentare

HTTPS richtig einschätzen Ob man eine Webseite via HTTPS aufruft, zeigt ein Schloss neben der Adresse im Webbrowser an. ...

Webbrowser

Bugfix für Firefox Quantum released - Installation erfolgt teilweise nicht automatisch!

Erfahrungsbericht von Volchy vor 3 TagenWebbrowser7 Kommentare

Hallo zusammen, gem. dem Artike von heise online wurde mit VersionFirefox 57.0.1 sicherheitsrelevante Bugs behoben. Entgegen der aktuellen Veröffentlichung ...

Sicherheit

Teamviewer Sessions können gekapert werden - Update tw. verfügbar

Information von sabines vor 3 TagenSicherheit6 Kommentare

In bestimmten Konstellationen können Teamviewer Sessions gekapert werden, wahrscheinlich aber ein recht unwahrscheinliches Szenario. Da der Teamviewer gerne für ...

Digitiales Fernsehen

Apple TV: Amazon Prime App ist verfügbar

Information von Frank vor 4 TagenDigitiales Fernsehen4 Kommentare

Die Amazon Prime Video App kann ab sofort auf einem Apple TV ab der 3 Generation installiert werden. Einfach ...

Heiß diskutierte Inhalte
Vmware
Installation Windows 10 VMware
Frage von Ghost108Vmware17 Kommentare

Hallo zusammen, versuche gerade mit Hilfe des vshpere clients eine virtuelle Windows 10 maschine aufzusetzen. 1. virtuelle Maschine erstellt ...

Exchange Server
SBS 2011 E-Mails können gesendet werden, aber nicht von extern empfangen
Frage von andreas1234Exchange Server14 Kommentare

Hallo Community, ich habe das Problem, dass seit knapp zwei Wochen die E-Mails von meinem SBS 2011 einwandfrei gesendet ...

Voice over IP
Telefonstörung - Ortsrufnummern kein Verbindungsaufbau
Frage von Windows10GegnerVoice over IP10 Kommentare

Hallo, sowohl bei uns als auch beim Opa ist es über VoIP nicht möglich Ortsrufnummern anzurufen. Es kommt nach ...

Windows Server
Server 2012 über Eingabeaufforderung devmgmt.msc geht nicht
gelöst Frage von achim222Windows Server9 Kommentare

Hallo, ich habe hier einen Server 2012 der im Reparaturmodus startet. Es liegt an einem falschen VirtIO Treiber für ...