只是一个旁注,这不是您验证某人的方法,只是一个示例代码。
常用的身份验证方法是获取用户名,使用搜索和可能的选择来获取用户的 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 "错误: " . 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 directroy 服务器和 openldap v2+ 的密码值的 Ldap 比较可能会失败。