PHP - Conexion Active Directory con formulario php

   
Vista:

Conexion Active Directory con formulario php

Publicado por alvaro (2 intervenciones) el 03/07/2012 18:31:52
Comentarles que estoy tratando de realizar una conexeion entre active directory y php con el sentido de poder acceder a un login hecho en php (en windows xp) con los usuarios que estan registrados en active directory(windows server 2003), los pasos que he seguido hasta ahora son:

He leído en foros que debe instalarse la extensión ldap en php (ya lo tengo) y el codigo que muestro a continuacion:

ldap.php
<?php
require_once 'LDAP.class.php';
$usuario = "jlopezperez";
$clave = "$j10p3zp3r3z&";
$servidor="192.168.0.21";
$puerto="389";
//Donde PHP es el usuario creado dentro de cone y cone dentro de base como unidades organizacionales
$cadenaConexionUsuario = "CN=PHP,OU=cone,OU=base,DC=ejemplo.dominio,DC=com";
//contraseña usuario de conexion de PHP
$password = "pruebaLdap";

$dn = "OU=base, DC=ejemplo.dominio, DC=com";
//Filtro para la búsqueda de un Usuario
$filtro = "(&(objectClass=user)(samAccountName=$usuario))";
//Conexion
$PHPLdap = new PHPLdap($servidor, $puerto);

//Indentificacion de password del usuario php
$PHPLdap->enlazarPHPLdap($cadenaConexionUsuario, $password);
$autenticar = $PHPLdap->autenticarUsuario($dn, $filtro, $clave);

//Verificamos el valor de retorno de la autenticación
if($autenticar===true){
echo "- A buena hora! Lograste autentificar al usuario $usuario";
}
else{
echo "- Contraseña Incorrecta para el usuario $usuario";
}
$PHPLdap->cerrarConexion();
?>
LDAP.class.php
<?
/*** Título: Enlace PHP con LDAP para autenticar usuarios en aplicaciónes web
**** Autor: Andrés Pérez-Albela H.** Web: http://www.seguridadinformatica.org/
**** Blog: http://develsec.blogspot.com
**** Versión: 1.0
**** Lenguaje: PHP
**** Licencia: Copyright © SeguridadInformatica.Org
**** Creative Commons Atribución-Sin Obras Derivadas 3.0 Unported License
****/
class PHPLdap{
private $ds;
private $bind;

public function PHPLdap($host, $puerto){

if(!isset($this->ds)){
if($this->ds = (ldap_connect($host, $puerto))){
echo "- LDAP conectado a: ".$host."";
}
else
{
die("- No me puedo conectar con servidor LDAP");
}
}
}

public function enlazarPHPLdap($cadenaConexionUsuario, $password){
$this->bind = @ldap_bind($this->ds, $cadenaConexionUsuario, $password);

if($this->bind){
echo "- Se realizó el enlace principal satisfactoriamente con el usuario PHP";
}
else
{
die("- El enlace principal no se pudo llevar a cabo");
}
}

public function autenticarUsuario($dn, $filtro, $clave){
$busqueda=ldap_search($this->ds, $dn, $filtro);
$resultados = ldap_get_entries($this->ds, $busqueda);

//Habiendo buscado el usuario a autenticar con "ldap_search" y obteniendo resultados en
//un arreglo $resultados, con "ldap_get_entries", pasamos a condicionar la existencia
//de resultados positivos.

if($resultados["count"]>0){
//Ingreso a la condicional, verificando con el "count" que el usuario exista
//Quiere decir que si encontró al usuario
//Luego obtenemos el DN (Nombre Distinguido) del usuario

$dnUsuario = trim($resultados[0]["distinguishedname"][0]);

//Para poder finalmente realizar el enlace final, siendo "enlace final" el login correcto.
//Si y solo si... la clave es correcta

if(@ldap_bind($this->ds, $dnUsuario, $clave)){
//Se realiza el bind, siendo la clave correcta, y se retorna un valor VERDADERO (true)
return true;
}
else
{
return false;
}
}
}

public function cerrarConexion(){
//Cerramos la conexion a LDAP
ldap_close($this->ds);
}
}
?>
Sin embargo me sigue mostrando que el usuario no ha sido autenticado, alguna idea porfavor
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
1
Responder