Foros del Web » Programando para Internet » PHP »

Usos de LDAP

Estas en el tema de Usos de LDAP en el foro de PHP en Foros del Web. Hola estoy haciendo un sistema y tengo una inquietud.. Necesito trabajar con un directorio activo implementado en Windows Server 2003 algo parecido a <url=http://www.microsoft.com/latam/technet/productos/windows/windowsserver2003/domcntrl.mspx> esto ...
  #1 (permalink)  
Antiguo 03/03/2011, 12:59
 
Fecha de Ingreso: julio-2010
Mensajes: 275
Antigüedad: 13 años, 10 meses
Puntos: 21
Usos de LDAP

Hola estoy haciendo un sistema y tengo una inquietud..

Necesito trabajar con un directorio activo implementado en Windows Server 2003 algo parecido a <url=http://www.microsoft.com/latam/technet/productos/windows/windowsserver2003/domcntrl.mspx> esto </url> usando las <url=http://www.php.net/ldap> librerias ldap </url> y este código

<PHP>
<?php
$usuario=$_POST['usuario'];
$passwd=$_POST['password'];

$ldapHost = "direccionservidor";
$ldapPort = "389";
$ldapUser ="$usuario,nombredominio";
$ldapPswd ="$passwd";
$ldapLink =ldap_connect($ldapHost, $ldapPort)
or die("Can't establish LDAP connection");
if (ldap_set_option($ldapLink,LDAP_OPT_PROTOCOL_VERSI ON,3))
{
echo "Usando LDAP v3";}else{
echo "Fallo para establecer el protocolo para la versión 3";
}
ldap_bind($ldapLink,$ldapUser,$ldapPswd)
or die("No hubo enlace con el servidor");
?> [/PHP]

Ahora lo que necesito son algunas partes de código con las funciones y usos de la librería LDAP??

Lo que pasa es que no quiero crear otra tabla de usuarios en una base de datos sino utilizar el directorio activo con lo usuarios de la red para la autenticación.
  #2 (permalink)  
Antiguo 03/03/2011, 14:17
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Respuesta: Usos de LDAP

¿Cual es la pregunta?
  #3 (permalink)  
Antiguo 03/03/2011, 14:59
 
Fecha de Ingreso: julio-2010
Mensajes: 275
Antigüedad: 13 años, 10 meses
Puntos: 21
Respuesta: Usos de LDAP

Quería saber como implementar esa librería para consultas a un directorio activo, eso era lo que había encontrado en el foro hata ese momento, pero encontré este <url=http://www.phpbuilder.com/manual2/manual/es/ref.ldap.php>enlace </url> que me ha ayudado un poco a despejar dudas sobre este asunto...
  #4 (permalink)  
Antiguo 03/03/2011, 18:27
Avatar de Marvin
Colaborador
 
Fecha de Ingreso: febrero-2005
Ubicación: global $Chile->Santiago;
Mensajes: 1.991
Antigüedad: 19 años, 3 meses
Puntos: 81
Respuesta: Usos de LDAP

Hola Sirrohan,

Primero... tienes que tener un servidor de LDAP instalado en la red.
Segundo... la estructura de la busqueda de usuarios a traves de los comandos php ldap va a depender de como este ordenado el DNS.
Tercero... para poder hacer una busqueda tienes que hacer algo como esto:
Código PHP:
    //Esta funcion le agrega el @dominio.com al usuario
    //para cuando estas en una red windows
    
function checkLDAPUser($user){
        
$arrCheck explode('@',$user);
        return 
$arrCheck[0].'@dominio.com';
    }
    
    function 
LDAP($user,$pass){
        
$ldap ldap_connect('ip.del.server.ldap');
        if (
ldap_set_option($ldapLDAP_OPT_PROTOCOL_VERSION3)) {
            
$login = @ldap_bind($ldap$user$pass);
            if(!
$login){
                
$_SESSION['isUser'] = false//cargo en sesion que no existe
                
ldap_close($ldap);
                
$_SESSION['msg'] = 'LDAP ERROR'.ldap_error($ldap); //llevo el mensaje
                
return 0;
            }else{
                
getAllInfoLDAP($user,$pass,$ldap);
                
ldap_close($ldap);
                
$_SESSION['isUser'] = true//le digo que si es usuario
                
return 1;
            }
        }else{
            
$_SESSION['isUser'] = false;
            
ldap_close($ldap);
            
$_SESSION['msg'] = 'LDAP ERROR'.ldap_error($ldap);
            return 
0;
        }
    }
    
    function 
getAllInfoLDAP($username,$password,$ds){
        
$dn[]="OU=DEFINIDOPORDNS,DC=DEFINIDOPORDNS,DC=DEFINIDOPORDNS";
        
$dn[]="OU=DEFINIDOPORDNS,DC=DEFINIDOPORDNS,DC=DEFINIDOPORDNS";
        
$id[] = $ds;
        
$id[] = $ds;
        try{
            
$attributes = array("cn""company","accountExpires","logonCount","physicalDeliveryOfficeName","mail");
            
$filter "(&(objectCategory=Person)(userPrincipalName=$username))";
            
$result ldap_search($id$dn$filter$attributes);
            
$search false;
            foreach(
$result as $value){
                if(
ldap_count_entries($ds,$value)>0){
                    
$search $value;
                    break;
                }
            }
            if(
$search){
                
$entries ldap_get_entries($ds$search);
                if(
$entries["count"] > 0){
                    
$_SESSION['USER_OFI'] = $entries[0]['physicaldeliveryofficename'][0];
                    
$_SESSION['USER_MBO'] = $entries[0]['logoncount'][0];
                    
$_SESSION['USER_CNX'] = $entries[0]['cn'][0];
                    return;
                }else{
                    
$_SESSION['USER_OFI'] = '';
                    
$_SESSION['USER_MBO'] = '';
                    
$_SESSION['USER_CNX'] = '';
                    return;
                }
            }else{
                
$_SESSION['USER_OFI'] = '';
                
$_SESSION['USER_MBO'] = '';
                
$_SESSION['USER_CNX'] = '';
                return;
            }
            return;
        }catch(
Exception $e){
            return;
        }
    } 
Con esto voy a buscar datos por defecto que tiene el dominio para sacar el nombre y otras cosas mas del usuario (si se encuentran definidos)

Suerte!
__________________
El que dice "Solo sé que nada sé", esta asumiendo que sabe algo.
Lea las FAQ's!
  #5 (permalink)  
Antiguo 04/03/2011, 06:28
 
Fecha de Ingreso: julio-2010
Mensajes: 275
Antigüedad: 13 años, 10 meses
Puntos: 21
Respuesta: Usos de LDAP

Muchas gracias por esta excelente información!

Etiquetas: ldap
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 04:57.