使用ApacheDS和PHP对LDAP进行身份验证

时间:2014-11-28 00:38:21

标签: php login ldap apacheds

我想知道如何在PHP中对ApacheDS进行身份验证。我一直得到一个"无效的凭证"当我尝试以组中的用户身份登录时。我可以登录为" uid = admin,ou = system"很好,但是如果我尝试" uid =,ou = consumer,ou = system",它会返回"无效的凭证"。

重要的是要注意,这不是条目的完整DN。它更像是" uid = ... + gn = ... + ...,ou = consumer,ou = system"。当绑定到管理员和API帐户时,我可以搜索并找到这个值。

如何绑定用户只是为了验证和检索他们的信息(比如他们的其他属性和他们的条目的孩子?这就是我正在做的和失败的。

$dn = ldap_connect($serveraddress,10389);
$bn = ldap_bind("uid=".$user.",ou=consumers,ou=system");
var_dump($bn);
var_dump(ldap_error($dn);

感谢您提供任何帮助。

编辑:所以我已经走得更远了。为什么这是一个协议错误?

$ds=ldap_connect("192.168.1.126",10389);  // must be a valid LDAP server!
if ($ds) ldap_bind($ds,"uid=apiaccess,ou=system",...);
else die("!Can't connect to server");

$userid = md5($user);
$results = ldap_get_entries($ds,ldap_search($ds,"ou=consumers,ou=system","(uid=".$userid.")"));
$result = $results[0]["dn"];
echo $result;
if ($ds) ldap_bind($ds,$result,$pass);
else die("!Can't connect to server");
var_dump(ldap_error($ds));

1 个答案:

答案 0 :(得分:1)

您需要告诉PHP to use LDAPv3

在拨打ldap_bind之前,请添加以下呼叫:

ldap_set_option($ds, LDAP_OPT_PROTOCOL_VERSION, 3);