的LDAP DN搜索成员


LDAP DN search memberof

当前我正在尝试确定用户是否应该能够使用LDAP登录。我读过很多用PHP编写的LDAP连接,到目前为止,事情都在进行中,直到我想搜索用户是否属于某个组。

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

  • DN:CN=PAY LDAP用户,OU=PAY,OU=Applications,OU=ITSpecials,DC=域,DC=be
  • SAM:admin
  • PWD:密码
  • 搜索DN ADM:OU=OU GROUP,OU=AD,DC=domain,DC=be
  • 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. 如果用户不是任何组的成员,则memberOf属性将不存在
  2. 内置组不会显示在memberOf属性中

一种更防失败的方法是使用一个有点模糊的LDAP过滤器来搜索您的组和任何嵌套的组以查找用户:LDAP_MATCHING_RULE_IN_CHAIN规则。详细信息请点击此处。

在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可能仍然有效,但不需要它。