PHP LDAP Login Gruppen Abfrage
Hallo Zusammen
ich habe dieses PHP Script:
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
Das ganze ist ein openLDAP (kein AD)
ich habe dieses PHP Script:
if (isset($_POST['btnLogin'])){
//übergebene Daten speichern
$username = $_POST['username'];
$password = $_POST['password'];
// Daten des LDAP-Servers
$domain = 'ou=Users,dc=ldap,dc=fritz,dc=box';
$ldap_server = 'ldap.fritz.box';
// Mit dem LDAP-Server verbinden
$ds = @ldap_connect($ldap_server);
//Wenn Verbindung erfolgreich ...
if ($ds){
//Protokollversion festlegen
ldap_set_option($ds, LDAP_OPT_PROTOCOL_VERSION, 3);
//Versuche mit den übermittelten Credentials eine Verbindung
if (@ldap_bind($ds,'uid='.$username.','.$domain,$password)){
// Credentials OK, setze Session-Variablen
$_SESSION['login_state'] = true;
$_SESSION['username'] = $username;
}else{
// Credentials falsch
$errormessage = "Login fehlgeschlagen!";
}
ldap_close($ds);
}else{
echo "Fehler beim Verbinden mit dem LDAP-Server: ".ldap_error($ds);
}
}
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
# Suchbereich: base
# Suchfilter: (objectClass=*)
# Anzahl Einträge: 1
#
# Generated by LDAP Account Manager (http://www.ldap-account-manager.org) on February 18, 2015 3:44 pm
# Version: 4.4
version: 1
# Eintrag 1: cn=bdv,ou=Groups,dc=ldap,dc=fritz,dc=box
dn: cn=bdv,ou=Groups,dc=ldap,dc=fritz,dc=box
cn: bdv
description: bdv Group
gidnumber: 10021
memberuid: max
memberuid: lisa
Das ganze ist ein openLDAP (kein AD)
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 263840
Url: https://administrator.de/forum/php-ldap-login-gruppen-abfrage-263840.html
Ausgedruckt am: 29.04.2025 um 04:04 Uhr
7 Kommentare
Neuester Kommentar

Ich nutze folgende PHP-Funktion in Kombination mit der Windows AD:
function ldap_ingroup($ldap, $user, $grp){
$results = ldap_search($ldap, $GLOBALS['config']['login']['ldap']['base_dn'], '(samaccountname='.$user.')', array("memberof", "primarygroupid"));
$entries = ldap_get_entries($ldap, $results);
if($entries['count'] == 0) return false;
array_shift($entries['memberof']);
$gruppen = $entries['memberof'];
foreach($gruppen as $gruppe){
$gruppe = str_replace('CN=', '', $gruppe);
$gruppe = strstr($gruppe, ',', true);
if($gruppe == $grp){
return true;
}
}
return false;
}

Man könnte das ganze in etwa so umbauen. Ich konnte das Script allerdings nicht testen.
<code style="php">if (isset($_POST['btnLogin'])){
übergebene Daten speichern
$username = $_POST['username'];
$password = $_POST['password'];
Daten des LDAP-Servers
$domain = 'ou=Users,dc=ldap,dc=fritz,dc=box';
$ldap_server = 'ldap.fritz.box';
$ldap_gruppe_dn = 'cn=bdv,ou=Groups,dc=ldap,dc=fritz,dc=box';
Mit dem LDAP-Server verbinden
$ds = @ldap_connect($ldap_server);
Wenn Verbindung erfolgreich ...
if ($ds){
Protokollversion festlegen
ldap_set_option($ds, LDAP_OPT_PROTOCOL_VERSION, 3);
Versuche mit den übermittelten Credentials eine Verbindung
if (@ldap_bind($ds,'uid='.$username.','.$domain,$password)){
ldap_search($ldap, $domain, '(uid='.$user.','.$domain.')', array("memberof", "primarygroupid"));
$entries = ldap_get_entries($ldap, $results);
if($entries['count'] == 0){
Nutzer nicht bei Suche gefunden
$errormessage = "Nutzer nicht gefunden!";
}else{
Nutzer bei der Suche gefunden + ersten Array Wert löschen (Ist die Anzahl der gefundenen Ergebnisse)
array_shift($entries['memberof']);
$in_gruppe = false;
Jede Gruppenmitgliedschaft mit der Gruppe von oben vergleichen und ggf. Variable setzen
foreach($entries['memberof'] as $gruppe){
if($gruppe == $ldap_gruppe_dn){
$in_gruppe = true;
}
}
Verarbeitung des Variablenwertes
if($in_gruppe == true){
Credentials OK, setze Session-Variablen
$_SESSION['login_state'] = true;
$_SESSION['username'] = $username;
}else{
$errormessage = "Nutzer nicht Mitglied der Gruppe!";
}
}
}else{
Credentials falsch
$errormessage = "Login fehlgeschlagen!";
}
ldap_close($ds);
}else{
echo "Fehler beim Verbinden mit dem LDAP-Server: ".ldap_error($ds);
}
}
<code style="php">if (isset($_POST['btnLogin'])){
übergebene Daten speichern
$username = $_POST['username'];
$password = $_POST['password'];
Daten des LDAP-Servers
$domain = 'ou=Users,dc=ldap,dc=fritz,dc=box';
$ldap_server = 'ldap.fritz.box';
$ldap_gruppe_dn = 'cn=bdv,ou=Groups,dc=ldap,dc=fritz,dc=box';
Mit dem LDAP-Server verbinden
$ds = @ldap_connect($ldap_server);
Wenn Verbindung erfolgreich ...
if ($ds){
Protokollversion festlegen
ldap_set_option($ds, LDAP_OPT_PROTOCOL_VERSION, 3);
Versuche mit den übermittelten Credentials eine Verbindung
if (@ldap_bind($ds,'uid='.$username.','.$domain,$password)){
ldap_search($ldap, $domain, '(uid='.$user.','.$domain.')', array("memberof", "primarygroupid"));
$entries = ldap_get_entries($ldap, $results);
if($entries['count'] == 0){
Nutzer nicht bei Suche gefunden
$errormessage = "Nutzer nicht gefunden!";
}else{
Nutzer bei der Suche gefunden + ersten Array Wert löschen (Ist die Anzahl der gefundenen Ergebnisse)
array_shift($entries['memberof']);
$in_gruppe = false;
Jede Gruppenmitgliedschaft mit der Gruppe von oben vergleichen und ggf. Variable setzen
foreach($entries['memberof'] as $gruppe){
if($gruppe == $ldap_gruppe_dn){
$in_gruppe = true;
}
}
Verarbeitung des Variablenwertes
if($in_gruppe == true){
Credentials OK, setze Session-Variablen
$_SESSION['login_state'] = true;
$_SESSION['username'] = $username;
}else{
$errormessage = "Nutzer nicht Mitglied der Gruppe!";
}
}
}else{
Credentials falsch
$errormessage = "Login fehlgeschlagen!";
}
ldap_close($ds);
}else{
echo "Fehler beim Verbinden mit dem LDAP-Server: ".ldap_error($ds);
}
}

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.
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.