Se podría pensar 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.
- Debe asegurarse de que el nombre de usuario/contraseña esté correctamente codificado durante el enlace.
- Debe cifrar la conexión mediante TLS.
- Uso de servidores LDAP separados para la redundancia en caso de que uno se caiga.
- Obteniendo un mensaje de error informativo si la autenticación falla.
En la mayoría de los casos, es más fácil utilizar una biblioteca LDAP que admita lo anterior. Finalmente terminé de rodar mi propia biblioteca que maneja todos los puntos anteriores: LdapTools (Bueno, no solo para autenticación, puede hacer mucho más).Puede ser utilizado como la 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 anterior se autentican:
- Validar que ni el nombre de usuario o contraseña está vacía.
- Asegúrese de que el nombre de usuario/contraseña esté codificado correctamente (UTF-8 de manera predeterminada)
- Pruebe con un servidor LDAP alternativo en caso de que uno esté inactivo.
- Encripte la solicitud de autenticación utilizando TLS.
- proporcionar información adicional si fallaba (es decir. Bloqueada/cuenta desactivada, etc)
Hay otras bibliotecas que hacer esto también (Tales como Adldap2). Sin embargo, me sentí lo suficientemente compelido como para proporcionar información adicional, ya que la respuesta más votada es en realidad un riesgo de seguridad del que no se puede validar la entrada ni utilizar TLS.
Creo que drupal tiene un módulo para thatr – redben