Hola chic@s! Espero estén todos bien.
Les escribo porque aun sigo optimizando mi código, esta vez 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 Código PHP:
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;
}
}
}
Utilizando ldap_compare Código PHP:
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;
}
}
}
}
Esto es lo que me aparece cuando utilizo ldap_search
Cita: Warning: Wrong parameter count for ldap_get_values()
Esto es lo que me arroja cuando utilizo ldap_compare:
Cita: ldap_compare(): supplied argument is not a valid ldap link resource
Espero su ayuda amigos!