只是一个附注,这并不是你通常验证某人的方法,只是一个示例代码。
常见的验证方法是获取用户的姓名,使用搜索并可能选择用户以获取她的 DN(单值),然后尝试使用该 dn 和提供的密码绑定到 ldapserver。如果成功,那么它就是正确的密码。
请注意,提供的密码必须不为空,否则许多 LDAP 会假设你想要匿名验证,并且它会成功,让你误以为是正确的密码。
(PHP 4 >= 4.0.2, PHP 5, PHP 7, PHP 8)
ldap_compare — 比较在 DN 指定条目中找到的属性的值
$ldap
,$dn
,$attribute
,$value
,$controls
= null
比较 attribute
的 value
与 LDAP 目录条目中相同属性的值。
ldap
一个 LDAP\Connection 实例,由 ldap_connect() 返回。
dn
LDAP 实体的识别名称。
attribute
属性名称。
value
比较的值。
controls
要与请求一起发送的 LDAP 控制 数组。
版本 | 描述 |
---|---|
8.1.0 | 现在 ldap 参数需要一个 LDAP\Connection 实例;以前,需要一个有效的 ldap link 资源。 |
8.0.0 |
现在 controls 可为空;以前,它默认为 [] 。 |
7.3.0 | 添加了对 controls 的支持 |
以下示例演示如何检查给定密码是否与 DN 指定条目中定义的密码匹配。
范例 #1 密码检查的完整示例
<?php
$ds=ldap_connect("localhost"); // 假设 LDAP 服务器在此主机上
if ($ds) {
// 绑定
if (ldap_bind($ds)) {
// 准备数据
$dn = "cn=Matti Meikku, ou=My Unit, o=My Company, c=FI";
$value = "secretpassword";
$attr = "password";
// 比较值
$r=ldap_compare($ds, $dn, $attr, $value);
if ($r === -1) {
echo "Error: " . ldap_error($ds);
} elseif ($r === true) {
echo "密码正确.";
} elseif ($r === false) {
echo "猜测错误!密码不正确.";
}
} else {
echo "无法绑定到 LDAP 服务器.";
}
ldap_close($ds);
} else {
echo "无法连接到 LDAP 服务器.";
}
?>
ldap_compare() 不能用于比较二进制值!
只是一个附注,这并不是你通常验证某人的方法,只是一个示例代码。
常见的验证方法是获取用户的姓名,使用搜索并可能选择用户以获取她的 DN(单值),然后尝试使用该 dn 和提供的密码绑定到 ldapserver。如果成功,那么它就是正确的密码。
请注意,提供的密码必须不为空,否则许多 LDAP 会假设你想要匿名验证,并且它会成功,让你误以为是正确的密码。
不是可能,而是将会。使用 PHP 4.0.4 和 openldap 1.2.9,即使使用密码的正确属性,这个小脚本也无法完成工作。如果它能做到就好了!
有趣的示例。除了很少有人会允许出于安全原因对密码属性进行比较之外。属性名称 "password" 与通常的模式不匹配。
用户 ID + 密码验证的通常方法是尝试使用提供的凭据进行绑定。
对于 ns 目录服务器和 openldap v2+,由于服务器支持密码散列,因此对密码值的 ldap_compare 可能会失败。