Pregunta

Estoy buscando una forma de autenticar usuarios a través de LDAP con PHP (con Active Directory como proveedor). Idealmente, debería poder ejecutarse en IIS 7 ( adLDAP lo hace en Apache). ¿Alguien había hecho algo similar, con éxito?

  • Editar: preferiría una biblioteca / clase con código que esté listo para comenzar ... Sería una tontería inventar la rueda cuando alguien ya lo ha hecho.
¿Fue útil?

Solución

La importación de una biblioteca completa parece ineficiente cuando todo lo que necesita son esencialmente dos líneas de código ...

$ldap = ldap_connect("ldap.example.com");
if ($bind = ldap_bind($ldap, 

La importación de una biblioteca completa parece ineficiente cuando todo lo que necesita son esencialmente dos líneas de código ...

<*>POST['username'],

La importación de una biblioteca completa parece ineficiente cuando todo lo que necesita son esencialmente dos líneas de código ...

<*>POST['password'])) { // log them in! } else { // error message }

Otros consejos

Usted pensaría que simplemente autenticar a un usuario en Active Directory sería un proceso bastante simple usando LDAP en PHP sin la necesidad de una biblioteca. Pero hay muchas cosas que pueden complicarlo bastante rápido:

  • Debe validar la entrada. Un nombre de usuario / contraseña vacío pasaría de otra manera.
  • Debes asegurarte de que el nombre de usuario / contraseña esté correctamente codificado al enlazar.
  • Debería estar cifrando la conexión mediante TLS.
  • Uso de servidores LDAP separados para redundancia en caso de que uno esté fuera de servicio.
  • Obtención de un mensaje de error informativo si falla la autenticación.

En realidad, en la mayoría de los casos es más fácil usar una biblioteca LDAP que admita lo anterior. Finalmente, terminé con mi propia biblioteca que maneja todos los puntos anteriores: LdapTools (Bueno, no solo para la autenticación , se puede hacer mucho más). Puede ser utilizado como el siguiente:

use LdapTools\Configuration;
use LdapTools\DomainConfiguration;
use LdapTools\LdapManager;

$domain = (new DomainConfiguration('example.com'))
    ->setUsername('username') # A separate AD service account used by your app
    ->setPassword('password')
    ->setServers(['dc1', 'dc2', 'dc3'])
    ->setUseTls(true);
$config = new Configuration($domain);
$ldap = new LdapManager($config);

if (!$ldap->authenticate($username, $password, $message)) {
    echo "Error: $message";
} else {
    // Do something...
}

La llamada de autenticación anterior será:

  • Valide que ni el nombre de usuario ni la contraseña estén vacíos.
  • Asegúrese de que el nombre de usuario / contraseña esté correctamente codificado (UTF-8 por defecto)
  • Intente con un servidor LDAP alternativo en caso de que uno esté inactivo.
  • Cifre la solicitud de autenticación mediante TLS.
  • Proporcione información adicional si falla (es decir, cuenta bloqueada / deshabilitada, etc.)

También hay otras bibliotecas para hacer esto (como Adldap2). Sin embargo, me sentí lo suficientemente obligado como para proporcionar información adicional, ya que la respuesta más votada es en realidad un riesgo de seguridad en el que basarse sin una validación de entrada realizada y sin usar TLS.

Hago esto simplemente pasando las credenciales de usuario a ldap_bind ().

http://php.net/manual/en/function.ldap- bind.php

Si la cuenta se puede enlazar a LDAP, es válida; Si no puede, no lo es. Si todo lo que está haciendo es la autenticación (no la administración de la cuenta), no veo la necesidad de una biblioteca.

Me gusta la Zend_Ldap Clase , solo puede usar esta clase en su proyecto, sin Zend Framework.

PHP tiene bibliotecas: http://ca.php.net/ldap

PEAR también tiene varios paquetes: http: // pear.php.net/search.php?q=ldap&in=packages&x=0&y=0

Tampoco lo he usado, pero lo iba a hacer en un punto y parecían que deberían funcionar.

Para aquellos que buscan un ejemplo completo, consulte http://www.exchangecore.com/blog/how-use-ldap-active-directory-authentication-php/ .

He probado esta conexión a los controladores de dominio de Windows Server 2003 y Windows Server 2008 R2 desde un servidor web de Windows Server 2003 (IIS6) y desde una empresa de Windows Server 2012 que ejecuta IIS 8.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top