我正在向我的一个仪表板添加身份验证。
我相信我的设置有点独特。我们使用服务帐户来获取用户的 DN,此查询按预期工作。然后我们使用新的 dn 而不是服务帐户进行第二次绑定。这也有效,因此从技术上讲,此时用户已正确验证。
我试图在成功绑定后执行第二个 ldap_search 作为我从第一个查询中提取的 dn。不幸的是,这给了我之前 ldap_search 的结果。这是我不明白的。
if($bind = @ldap_bind($ldap, $ldap_dn, $adminpass)) {
// valid
echo "bound to ldap<BR>\n";
$filter = "(&(objectclass=user)(samaccountname=$user))";
$attr = array("dn, password, samaccountname");
$dn = "DC=CORP,DC=COMPANY,DC=com";
$result = ldap_search($ldap, $dn, $filter, $attr) or exit("Unable to search LDAP server");
$entries = ldap_get_entries($ldap, $result);
// Now build second query to bind and authenticate as user.
$ldap_dn_bind = $entries["0"]["dn"];
echo $ldap_dn_bind;
if($ubind = @ldap_bind($ldap, $ldap_dn_bind, $password)) {
echo "bound as $user - $ldap_dn_bind<BR>\n\n"; // Works
$u_attr = array("description, physicaldeliveryofficename, postaladdress, st, postalcode, title, telephonenumber, mobile, samaccountname, givenname, sn, company, displayname, employeetype, mail, manager, employeeID, KMADescription, terminationdate");
$u_result = ldap_search($ldap, $dn, $filter, $u_attr) or exit("Unable to search LDAP server");
echo "ldap search<BR>\n";
$u_entries = ldap_get_entries($ldap, $u_result);
echo "print u_entries";
print_r($u_entries);
echo "done";
} else {
die("failed to authenticate user");
}
这一行:
$u_result = ldap_search($ldap, $dn, $filter, $u_attr) or exit("Unable to search LDAP server");
似乎可以按预期工作,并且执行 ldap 搜索没有错误。但是,$u_entries 包含与 $entries 相同的信息,这就是我遇到问题的地方。我正在尝试获取有关用户的详细信息并将它们插入到本地数据库中(如果它们尚不存在)。
Helenr
慕勒3428872