Ver Mensaje Individual
  #1 (permalink)  
Antiguo 12/08/2011, 07:13
Avatar de eliza_ralves
eliza_ralves
 
Fecha de Ingreso: junio-2009
Ubicación: Caracas
Mensajes: 126
Antigüedad: 14 años, 10 meses
Puntos: 2
Búsqueda con LDAP - PHP

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!
__________________
“El mayor enemigo del conocimiento no es la ignorancia, sino la ilusión del conocimiento”— Stephen Hawking

Última edición por eliza_ralves; 12/08/2011 a las 07:32