PHP + LDAP查找memberOf的成员

时间:2016-04-11 13:32:53

标签: php active-directory ldap

我使用 sAMAccountName 来搜索用户, 检索用户后,我会收到用户" memberof" 列表。 我想从用户那里获取" memberof" 的所有成员。 是否有可能在一次搜索中完成?

未婚夫。

好这是我到目前为止所得到的:

$ds = ldap_connect('145.20.0.10', 389);
$bind = 1;
$bind = ldap_bind($ds, "aa", "aa");
if( $bind ){
      $dn = "OU=all users,DC=mycustomdc,DC=co,DC=il";
      $search = ldap_search($ds, $dn, "(samaccountname=asd)", ['memberOf', 'company','department']);
      $enr = ldap_get_entries($ds, $search);
}

这会给我会员的会员, 但我需要获得成员

的成员

1 个答案:

答案 0 :(得分:1)

如果我理解正确,您将从一个用户帐户开始,并希望:

  1. 获取用户所属的所有组(通过获取其值) '的memberOf')
  2. 找到步骤1中找到的每个组的成员。
  3. 有两种方法可以做到这一点:

    1. 遍历所有组并单独调用以获取'member'属性,该属性将包含成员列表。
    2. 构建基于'memberOf'的查询,以查找属于同一组的所有其他人:
    3.   

      (及(objectClass的=用户)(|(的memberOf = CN = 1组,OU =东西,DC = MYDOMAIN,DC = COM)(的memberOf = CN =组2,OU =东西,DC = MYDOMAIN,DC = COM )(的memberOf = CN =组3,OU =东西,DC = MYDOMAIN,DC = COM)))

      根据您使用的方法,可能会得到不同的结果。

      方法1将为您提供组中的任何成员,即使它们位于域或林之外的其他域(例如,具有单向信任的域)。

      使用方法2(搜索memberOf),如果使用LDAP://(端口389)或GC://(端口3268)进行搜索,结果将会有所不同。使用GC://将不适用于全局或域本地组,而使用LDAP://将。但是,如果您使用LDAP://您将只从一个域获取用户,如果您的AD林中有其他域,则可能会出现问题。

      如果您的组织中只有一个域名对其他域没有信任,那么最好使用LDAP://。