LDAP DN搜索成员

时间:2016-05-15 17:13:53

标签: php active-directory ldap

目前我正在尝试确定用户是否应该能够使用LDAP登录。我已经阅读了许多用PHP编写的LDAP连接,到目前为止我们还在进行搜索,直到我想搜索用户是否属于某个组。

详细信息我当前必须连接到LDAP服务器:

  • DN:CN =支付LDAP用户,OU =支付,OU =应用程序,OU = IT 特价,DC =域,DC =是
  • SAM:admin
  • PWD:密码
  • 搜索DN ADM:OU = OU GROUP,OU = AD,DC =域,DC =是
  • LDAP / GC服务器:knt-adm-dc1.domain.be,knt-adm-dc2.domain.be

此代码虽然没有给我任何结果:

if($bind = ldap_bind($ldap, $username, $password)) {
    $filter = "(samaccountname=".$user.")";
    $attr = array("memberof");
    $result = ldap_search($ldap, $ldap_dn, $filter, $attr) or exit("Unable to search LDAP server");
    $entries = ldap_get_entries($ldap, $result);
    ldap_unbind($ldap);
}

当我从搜索中省略$ attr时,我确实得到了一个结果,但我似乎找不到确定此用户是ADMIN组的一部分的方法。

根据我在网上阅读的内容,应该使用memberof属性来查找用户是否属于某个组。

1 个答案:

答案 0 :(得分:0)

一些事情:

  1. 如果用户不是任何群组的成员,则memberOf属性将不存在。
  2. 内置组未显示在memberOf属性中。
  3. 更加防止故障的方法是使用一个有点模糊的LDAP过滤器来搜索用户的组和任何嵌套组:LDAP_MATCHING_RULE_IN_CHAIN规则。详情here

    在PHP中,它看起来像这样(未经测试):

    $filter = "(member:1.2.840.113556.1.4.1941:=".$user_distinguished_name.")";
    $ldap_dn = "LDAP://".$group_distinguished_name;
    $attr = array("cn");
    $result = ldap_list($ldap, $ldap_dn, $filter, $attr);
    

    其中$user_distinguished_name是用户的可分辨名称,$group_distinguished_name是该组的DN。你可能必须事先得到这些。

    注意我放ldap_list而不是ldap_search。两者之间的唯一区别是搜索范围。我认为ldap_search可能仍然有用,但不需要它。