Just a side note that this is not how you'd ever AUTHENTICATE someone, just an example code.
The common way to authenticate is to get the users name, use search and perhaps selection to the user to get her DN (single value) then attempt to BIND to the ldapserver using that dn and the offered password. If it works, then it's the right password.
Note that the password offered MUST NOT BE EMPTY or many LDAPs will presume you meant to authenticate anonymously and it will succeed, leaving you thinking it's the right password.
ldap_compare
(PHP 4 >= 4.0.2, PHP 5)
ldap_compare — Comparar el valor del atributo encontrado en la entrada que se especificó con un DN
Descripción
Comparar el value del attribute
con el valor del mismo atributo en una entrada del directorio de LDAP.
Parámetros
-
link_identifier -
Un enlace identificador de LDAP, devuelto por ldap_connect().
-
dn -
El nombre distinguido de una entidad de LDAP.
-
attribute -
El nombre del atributo.
-
value -
El valor comparado.
Valores devueltos
Devuelve TRUE si value es similar de otra forma devuelve
FALSE. Devuelve -1 en caso de error.
Ejemplos
El siguiente ejemplo demuestra como revisar si una contraseña proporcionada es igual o no a la que está definida en una entrada DN específica.
Ejemplo #1 Ejemplo completo de revisión de contraseña
<?php
$ds=ldap_connect("localhost"); // Asumiendo que el servidor de LDAP está en este mismo ordenador
if ($ds) {
// enlazar
if (ldap_bind($ds)) {
// preparar los datos
$dn = "cn=Matti Meikku, ou=Mi Departamento, o=Mi Compañía, c=FI";
$value = "contraseñasecreta";
$attr = "contraseña";
// comparar el valor
$r=ldap_compare($ds, $dn, $attr, $value);
if ($r === -1) {
echo "Error: " . ldap_error($ds);
} elseif ($r === true) {
echo "Contraseña correcta.";
} elseif ($r === false) {
echo "Supongo que falló! Contraseña incorrecta.";
}
} else {
echo "No se puede enlazar al servidor de LDAP.";
}
ldap_close($ds);
} else {
echo "No se puede conectar al servidor de LDAP.";
}
?>
Notas
ldap_compare() NO puede ser utilizado para comparar valores BINARIOS!
With PHP 4.3.* is Password no longer a valid attribute.. try to use userPassword
Not probably, will. With PHP 4.0.4 and openldap 1.2.9 this little script, even with the correct attributes for the password does not do the job. Would superb if it did!
Interesting example. Apart from the fact that very few people would allow comaprisions of the password attribute for security reasons. The attribute name of "password" does not match the usual schemas.
The usual method of user id + password verification is to attempt to bind using the supplied credentials.
Ldap compare on password values will probably fail with ns directroy server and openldap v2+ becuase of server support for password hashing.
