无法在php中使用ldap_search为用户找到Windows AD组

时间:2013-10-17 02:39:39

标签: php ldap

我可以使用php成功连接并绑定到Windows AD中的ldap。但是,我没有得到我期望从ldap_search获得的结果。我知道我的测试用户在Intranet_Group123中,但是ldap_search没有找到该组,或者我不知道如何正确解析结果数组。我知道该组的杰出名称: CN = Intranet_Group123,OU = PD,OU =内联网,OU =应用,OU =组,DC = MYDOMAIN,DC = COM

以下是我正在使用的代码(基于博客:blog here)。

    $user = 'testuser';
    $password = 'test';
    $ldap_host = "myServer";

// Active Directory DN (I have also tried having CN=Intranet_Group123 at the beginning of the string)
$ldap_dn = "OU=PD,OU=Intranet,OU=Apps,OU=Groups,DC=mydomain,DC=com";


// Domain, for purposes of constructing $user
$ldap_usr_dom = "@mydomain.com";

// connect to active directory
$ldap = ldap_connect($ldap_host);

// verify user and password
if($bind = @ldap_bind($ldap, $user . $ldap_usr_dom, $password)) {
    var_dump($bind);  // bool•true
    // valid
    // check presence in groups
    $filter = "(sAMAccountName=" . $user . ")";
    $attr = array("memberof");
    $result = ldap_search($ldap, $ldap_dn, $filter, $attr) or exit("Unable to search LDAP server");
    var_dump($result);  //resource(8) of type (ldap result)
    $entries = ldap_get_entries($ldap, $result);
    var_dump($entries);  // array(1) {'count' → int 0}

1 个答案:

答案 0 :(得分:0)

您正在使用过滤器(sAMAccountName=username)搜索群组容器。这不会产生任何有意义的结果,因为组容器中没有用户条目,因为var_dump($entries) shows -- // array(1) {'count' -> int 0}只是提示您没有找到任何条目。

相反,将您的查询转到根搜索(dc=mydomain,dc=com)并使用更复杂的过滤器进行搜索。您需要找到具有指向正确组DN的特定sAMAccountName memberof属性的用户。请注意,memberof属性接受DN,而不是组名。

然后查询过滤器如下所示:

"(&(objectclass=user)(sAMAccountName=".$user.")(memberof=".$ldap_dn."))"

并使用子树范围搜索$root_prefix其中$root_prefix = "dc=mydomain,dc=com"