Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

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, 1089 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: Xermon
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: Xermon
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: Xermon
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 ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(8)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
PHP
PHP MySQL Login (7)

Frage von Yanmai zum Thema PHP ...

PHP
gelöst PHP Dropdownmenü mit SQL-Abfrage (4)

Frage von tobmes zum Thema PHP ...

PHP
MySQL-Abfrage mit php: Wert + true bzw. false (2)

Frage von tomolpi zum Thema PHP ...

C und C++
gelöst IF Abfrage funktioniert nicht mehr (2)

Frage von pablovic zum Thema C und C ...

Heiß diskutierte Inhalte
Microsoft
Ordner mit LW-Buchstaben versehen und benennen (21)

Frage von Xaero1982 zum Thema Microsoft ...

Netzwerkmanagement
gelöst Anregungen, kleiner Betrieb, IT-Umgebung (18)

Frage von Unwichtig zum Thema Netzwerkmanagement ...

Windows Update
Treiberinstallation durch Windows Update läßt sich nicht verhindern (17)

Frage von liquidbase zum Thema Windows Update ...

Windows Tools
gelöst Aussendienst Datensynchronisierung (12)

Frage von lighningcrow zum Thema Windows Tools ...