Búsqueda con LDAP - PHP
Publicado por Elizabeth (2 intervenciones) el 12/08/2011 16:35:22
Hola, les escribo porque estoy optimizando mi código para autenticación con LDAP de la empresa.
Les cuento, cuando se inicia sesión, primero hago la conexión con LDAP de la empresa, verifico que el username y password sean iguales a los registrados para conocer si pertenece a la empresa y si todo es correcto, lo verifico en una tabla de BD que son los usuarios que pueden utilizar el sistema, es decir, no todos los emplead ode la empresa pueden utilizar el sistema.
El caso es que todo me funciona para inicio de sesión.
Existe un módulo que lo utiliza el administrador de la página, el cual va a tener la potestad de incluir o no a los usuarios para utilizar dicho sistema. Lo que quiero hacer es realizar dicha validación de verificar con LDAP antes de registrar o modificar el username de un usuario nuevo o ya existente.
Lo he realizado con las funciones de ldap_search y ldap_compare, siguiendo los ejemplos que ponen en el API de PHP, pero siempre me aparece que algo no es válido.
Verifique el nombre del atributo al cual buscar/comparar ... pero me sigue dando el mismo error..
Les muestro los códigos para ver si me pueden ayudar:
Utilizando ldap_search:
El error que me arroja es : Warning: Wrong parameter count for ldap_get_values()
Utilizanzo ldap_compare:
Y el error que me arroja es : ldap_compare(): supplied argument is not a valid ldap link resource
La llamada a la función es la siguiente:
Espero me puedan ayudar, ya que es algo urgente.
Gracias de antemano!
Les cuento, cuando se inicia sesión, primero hago la conexión con LDAP de la empresa, verifico que el username y password sean iguales a los registrados para conocer si pertenece a la empresa y si todo es correcto, lo verifico en una tabla de BD que son los usuarios que pueden utilizar el sistema, es decir, no todos los emplead ode la empresa pueden utilizar el sistema.
El caso es que todo me funciona para inicio de sesión.
Existe un módulo que lo utiliza el administrador de la página, el cual va a tener la potestad de incluir o no a los usuarios para utilizar dicho sistema. Lo que quiero hacer es realizar dicha validación de verificar con LDAP antes de registrar o modificar el username de un usuario nuevo o ya existente.
Lo he realizado con las funciones de ldap_search y ldap_compare, siguiendo los ejemplos que ponen en el API de PHP, pero siempre me aparece que algo no es válido.
Verifique el nombre del atributo al cual buscar/comparar ... pero me sigue dando el mismo error..
Les muestro los códigos para ver si me pueden ayudar:
Utilizando ldap_search:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
function busquedaLDAP($username, $password){
$ldapconn = conectarLDAP();
// Verificación del establecimiento de la conexión con algún servidor
if(!$ldapconn[0] && !$ldapconn[1]) {
// Conexión Fallida. Devuelve código de error asociado (1)
return 1;
// Alguna conexión Exitosa
} else {
// Nombre Relativo Distinguido del usuario en el LDAP
$ldaprdn = $username;
// Contraseña del usuario en el Directorio Activo
$ldappass = $password;
// Realizando la autenticación del usuario en el(los) servidor(es) LDAP
// conectado(s)
$ldapbind = autenticarLDAP($ldapconn[0], $ldaprdn, $ldappass);
$ldapbind2 = autenticarLDAP($ldapconn[1], $ldaprdn, $ldappass);
// Verificación del enlace resultante
if ($ldapbind || $ldapbind2) {
$busqueda=ldap_search($ldapconn,"ou=Users,dc=intra", "samAccountName=$username");
$values = ldap_get_values($ldapconn, $busqueda);
echo $values["count"] . " resultados de la búsqueda.<br />";
for ($i=0; $i < $values["count"]; $i++) {
echo $values[$i] . "<br />";
}
/* $info = ldap_get_entries($ldapconn, $busqueda);
echo $info["count"]["Users"] ." entradas devueltas\n";*/
desconectarLDAP($ldapconn[0]);
desconectarLDAP($ldapconn[1]);
// Autenticación Exitosa (usuario pertenece a Activo). Devuelve código de éxito (0)
return 0;
} else {
desconectarLDAP($ldapconn[0]);
desconectarLDAP($ldapconn[1]);
// Autenticación Fallida (usuario no pertenece a directorio Activo). Devuelve código de error asociado (2)
return 2;
}
}
}
El error que me arroja es : Warning: Wrong parameter count for ldap_get_values()
Utilizanzo ldap_compare:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
function busquedaLDAP($username, $password){
$ldapconn = conectarLDAP();
// Verificación del establecimiento de la conexión con algún servidor
if(!$ldapconn[0] && !$ldapconn[1]) {
// Conexión Fallida. Devuelve código de error asociado (1)
return 1;
// Alguna conexión Exitosa
} else {
// Nombre Relativo Distinguido del usuario en el LDAP
$ldaprdn = $username;
// Contraseña del usuario en el Directorio Activo
$ldappass = $password;
// Realizando la autenticación del usuario en el(los) servidor(es) LDAP
// conectado(s)
$ldapbind = autenticarLDAP($ldapconn[0], $ldaprdn, $ldappass);
$ldapbind2 = autenticarLDAP($ldapconn[1], $ldaprdn, $ldappass);
// Verificación del enlace resultante
if ($ldapbind || $ldapbind2) {
$dn = "ou=Users, dc=intra";
$value = "samAccountName";
$attr = "$username";
// compare value
$r=ldap_compare($ldapconn, $dn, $attr, $value);
if ($r === -1) {
echo "Error: ".ldap_error($ldapconn);
} elseif ($r === TRUE) {
echo "Username correct.";
desconectarLDAP($ldapconn[0]);
desconectarLDAP($ldapconn[1]);
// Autenticación Exitosa (usuario pertenece a directorio Activo). Devuelve código de éxito (0)
return 0;
} elseif ($r === FALSE) {
echo "Wrong guess! Username incorrect.";
desconectarLDAP($ldapconn[0]);
desconectarLDAP($ldapconn[1]);
// Autenticación Fallida (usuario no pertenece a directorio Activo). Devuelve código de error asociado (2)
return 2;
}
}
}
}
Y el error que me arroja es : ldap_compare(): supplied argument is not a valid ldap link resource
La llamada a la función es la siguiente:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
// Obtener valores de campos del formulario de ingreso de usuario
$username = $_POST['username'];
$rol = $_POST['rol'];
// Verificar si el usuario a registrar pertenece al Directorio Activo
$verificaLDAP = busquedaLDAP($username, $password);
// El nombre de usuario pertenece al Directorio Activo
if ($verificarLDAP == 0){
// Verificar si el nombre del usuario a registrar ya está siendo
// utilizado en el sistema
$yaExiste = perteneceSPO2($username);
//El nombre de usuario ya se encuentra registrado
if($yaExiste){
// Volver a formulario de ingreso de usuario
$_SESSION['error'] = 3;
$_SESSION['errorUsername'] = $username;
$_SESSION['errorRol'] = $rol;
$_SESSION['errorDiscU'] = $disciplina;
$_SESSION['errorOficU'] = $oficina;
header("Location: agregarUsuario.php");
// El nombre de usuario no se encuentra registrado en el sistema
} else {
// Registrar los datos del nuevo usuario en la BD.
insertarNuevoUsuario($username, $disciplina, $oficina, $rol);
// Volver a página de presentación del módulo de perfiles de usuario,
// mostrando mensaje de éxito correspondiente
$_SESSION['exito'] = 1;
$_SESSION['errorUsername'] = NULL;
$_SESSION['errorRol'] = NULL;
$_SESSION['errorOficU'] = NULL;
$_SESSION['errorDiscU'] = NULL;
header("Location: principal_cuentas.php");
}
}
// El nombre de usuario no pertenece al Directorio Activo
else {
// Volver a formulario de ingreso de usuario
$_SESSION['error'] = 3;
$_SESSION['errorUsername'] = $username;
$_SESSION['errorRol'] = $rol;
$_SESSION['errorDiscU'] = $disciplina;
$_SESSION['errorOficU'] = $oficina;
header("Location: agregarUsuario.php");
}
Espero me puedan ayudar, ya que es algo urgente.
Gracias de antemano!
Valora esta pregunta
0