LDAP_Search 给出一个空数组

问题描述 投票:0回答:1

我是 LDAP 新手,我正在尝试使用 PHP Web 应用程序来与我公司的 Active Directory 服务器通信。

我有以下代码:

$ldap_server = 'ldap://server.domain.local';
$ldap_domain = '@domain.local';
$ldapport = 389;                                                
$ldap_admin_user = "admin_user";
$ldap_admin_password = 'admin_password';
try {
    $ldapconn = ldap_connect($ldap_server);
    
    ldap_set_option($ldapconn, LDAP_OPT_REFERRALS, 0);
    ldap_set_option($ldapconn, LDAP_OPT_PROTOCOL_VERSION, 3);
            
    $bind = ldap_bind($ldapconn, $ldap_admin_user.$ldap_domain, $ldap_admin_password);
    if ($bind) {
            $arr = array('cn', 'sAMAccountName');
            $ldapsearch = (object)[];
            $ldapsearch = ldap_search(
                $ldapconn, 
                'OU=Users,DC=domain,DC=local', 
                "(objectClass=person)",
                $arr
            ) or die ("Error trying to bind: ".ldap_error($ldapconn));
            
            var_dump ($ldapsearch); 
            
            //$entries = ldap_get_entries($ldap, $ldapsearch);
            
    }
    else {
        echo "SyncError: LDAP bind failed"
    }

} catch (\Exception $e) {
    echo "SyncError: LDAP connection failed"
}

我得到以下结果:

object(LDAP\Result)#24 (0) { } 

但是,如果我在同一台计算机上使用相同的凭据、协议和完全相同的过滤字符串的 LDAP 浏览器 (JXplorer),那么我可以看到结果的层次结构。我不知道为什么 PHP 不抓取这些条目。如果有帮助的话,我正在使用 PHP 8.3.9。这也在 Windows 机器上。

我尝试更改过滤字符串。尝试使用不同的管理员用户进行绑定。在 ldap_connect.conf 中显式声明端口。没有变化。

如果我将我的用户嵌套在另外两个 OU 下也会有影响吗? 例如:我的基本 DN 是当前 OU=Users,DC=domain,DC=Local。但是,如果 OU=Users 内还有两个 OU(OU=Group1 和 OU=Group2),并且我的用户位于这 2 个组中,该怎么办?

php authentication active-directory ldap windows-server
1个回答
0
投票

我现在无法测试,但我怀疑

var_dump
无法按照您期望的方式在
LDAP\Result
对象上工作。 ldap_search
页面
上的
示例显示您需要对结果调用
ldap_get_entries
,该结果已在代码中,但已注释掉:

$entries = ldap_get_entries($ldap, $ldapsearch);

此时,

var_dump($entries)
可能会起作用,但您也可以执行
echo $entries["count"]
来获取结果数量。

© www.soinside.com 2019 - 2024. All rights reserved.