获取dn后PHP LDAP二次查询

我正在向我的一个仪表板添加身份验证。


我相信我的设置有点独特。我们使用服务帐户来获取用户的 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 相同的信息,这就是我遇到问题的地方。我正在尝试获取有关用户的详细信息并将它们插入到本地数据库中(如果它们尚不存在)。


猛跑小猪
浏览 156回答 2
2回答

Helenr

我之前遇到过同样的问题,请检查您的 LDAP 服务器是否允许外部连接。如果您使用电子邮件,请检查您的 $dn 变量,仅在 @ 符号后输入内容还要确保您的管理员凭据这个链接也帮助我更多地理解它:https&nbsp;:&nbsp;//github.com/Adldap2/Adldap2-Laravel/issues/224注意我使用 Laravel

慕勒3428872

我的属性数组不正确,根据定义 ldap_search 将始终返回 DN。问题已解决。
打开App,查看更多内容
随时随地看视频慕课网APP