Como puede ver a continuación, no obtengo ninguna información de usuario cuando realizo una búsqueda de LDAP en el grupo de seguridad. Deseo usar el $_SERVER[remote_user]
para verificar si el usuario es miembro de este grupo. También me gustaría recuperar la información de este usuario y actualizar la base de datos sql con ella. es posible?Cómo recuperar información de usuario de un Grupo de seguridad de Active Directory usando LDAP y PHP
$dn = "CN=Intra,OU=Common Security Groups,DC=mydomain,DC=local";
$filter = "(member=*)";
$ad = ldap_connect("IP") or die("Couldn't connect to AD!");
ldap_set_option($ad, LDAP_OPT_PROTOCOL_VERSION, 3);
$bd = ldap_bind($ad, "[email protected]", "password") or die("Can't bind to server.");
$sr = ldap_search($ad,$dn,$filter);
$entries = ldap_get_entries($ad, $sr);
print_r($entries);
devoluciones esto:
Array
(
[count] => 1
[0] => Array
(
[objectclass] => Array
(
[count] => 2
[0] => top
[1] => group
)
[0] => objectclass
[cn] => Array
(
[count] => 1
[0] => Intra
)
[1] => cn
[description] => Array
(
[count] => 1
[0] => Group for (LDAP) INTRANET server access
)
[2] => description
[member] => Array
(
[count] => 4
[0] => CN=Fname1 Lname1,OU=Mail enabled users,OU=Aberdeen,DC=mydomain,DC=local
[1] => CN=Fname2 Lname2,OU=Mail enabled users,OU=Forres,DC=mydomain,DC=local
[2] => CN=Fname3 Lname3,OU=Houston,DC=mydomain,DC=local
[3] => CN=Fname4 Lname4,OU=Mail enabled users,OU=Bergen,DC=mydomain,DC=local
)
[3] => member
[distinguishedname] => Array
(
[count] => 1
[0] => CN=Intra,OU=Common Security Groups,DC=mydomain,DC=local
)
[4] => distinguishedname
[instancetype] => Array
(
[count] => 1
[0] => 4
)
[5] => instancetype
[whencreated] => Array
(
[count] => 1
[0] => 20100711172407.0Z
)
[6] => whencreated
[whenchanged] => Array
(
[count] => 1
[0] => 20100712063949.0Z
)
[7] => whenchanged
[usncreated] => Array
(
[count] => 1
[0] => 17491499
)
[8] => usncreated
[usnchanged] => Array
(
[count] => 1
[0] => 17498823
)
[9] => usnchanged
[name] => Array
(
[count] => 1
[0] => Intra
)
[10] => name
[objectguid] => Array
(
[count] => 1
[0] =>
)
[11] => objectguid
[objectsid] => Array
(
[count] => 1
[0] =>
)
[12] => objectsid
[samaccountname] => Array
(
[count] => 1
[0] => Intra
)
[13] => samaccountname
[samaccounttype] => Array
(
[count] => 1
[0] => 268435456
)
[14] => samaccounttype
[grouptype] => Array
(
[count] => 1
[0] => -2147483646
)
[15] => grouptype
[objectcategory] => Array
(
[count] => 1
[0] => CN=Group,CN=Schema,CN=Configuration,DC=mydomain,DC=local
)
[16] => objectcategory
[count] => 17
[dn] => CN=Intra,OU=Common Security Groups,DC=mydomain,DC=local
)
)
todo funcionaba bien cuando utilicé el DN normales:
$dn = "OU=Mail enabled users,OU=Bergen,DC=mydomain,DC=local";
Sin embargo, un experto en AD me dijeron que era un gran NO -NO y que debería usar grupos de seguridad en su lugar: \
¡Gracias por la respuesta rápida! Pero cuando trato de usar su filtro obtengo este error: Advertencia de PHP: ldap_search() [function.ldap-search]: Buscar: Error de operaciones en C: \ inetpub \ wwwroot \ test \ test.php en la línea 33 Advertencia de PHP: ldap_get_entries(): el argumento proporcionado no es un recurso de resultado LDAP válido en C: \ inetpub \ wwwroot \ test \ test.php en la línea 35 – horgen
Como veo que estás en Windows, aquí tienes un consejo. Descargue Softerra LDAP Browser 2.6 (es gratis), conéctelo a su AD y pruebe sus búsquedas con la herramienta. - En teoría, un DN base de '" DC = mydomain, DC = local "' debería funcionar, sin embargo. – Tomalak
Gracias. Ahora no sé qué demonios está pasando. Hice una búsqueda para DN: "DC = mydomain, DC = local" FILTER: "(& (objectCategory = user) (memberOf = CN = Intra, OU = Grupos de seguridad comunes, DC = mydomain, DC = local))" in el navegador LDAP sin problemas en absoluto. Pero cuando intento hacer lo mismo en PHP obtengo este error: "Advertencia de PHP: ldap_search() [function.ldap-search]: Buscar: error de operaciones en C: \ inetpub \ wwwroot \ test \ test.php en línea 17 ":(No obtengo ningún error si uso" OU = Bergen, DC = mydomain, DC = local ". Pero entonces tengo que crear un bucle for para cada OU. – horgen