【问题标题】:What is the best way to select attributes for all members of an AD LDAP group from PHP?从 PHP 中为 AD LDAP 组的所有成员选择属性的最佳方法是什么?
【发布时间】:2009-04-07 22:31:02
【问题描述】:

我需要从 PHP 应用程序中为特定组中的所有用户选择一些属性。我意识到我可以查询组的“成员”属性以获取每个成员的 dn,然后对每个成员的属性进行单独的 LDAP 查询。但是,我希望有一个我可以执行的查询会立即返回所有结果,以防止 PHP 应用程序和 LDAP 服务器 (AD) 之间的过多来回。

使用LDAP browser 我可以成功地在我的整个域上运行搜索:

Search DN:  DC=middlebury,DC=edu
Filter: (memberOf=CN=BG_Cells,OU=General,OU=Groups,DC=middlebury,DC=edu)
Attributes: objectClass,mail,givenName,sn,sAMAccountName,telephoneNumber

并取回预期的结果。但是,当我使用 PHP 的 ldap_search() 方法尝试此过滤器时,我得到一个带有代码 1Operations error

下面是我正在使用的 PHP。

....
$baseDN = 'DC=middlebury,DC=edu';
$filter = '(memberOf=CN=BG_Cells,OU=General,OU=Groups,DC=middlebury,DC=edu)';
$attributes = array('objectClass','mail','givenName','sn','sAMAccountName','telephoneNumber');

$result = ldap_search($connection, $baseDN, $filter, $attributes);

if (ldap_errno($connection))
    print "Read failed for $filter with message: ".ldap_error($connection).", #".ldap_errno($ connection));

其他过滤器可以很好地处理这些属性,并且仅使用 array('mail') 或属性的空数组不会消除错误结果,所以我确定问题出在我的过滤器而不是连接或属性上设置。

第二种选择是在组的“成员”字段中对组成员 dns 进行一次查询,然后为每个成员 dn 构建一个长 OR 查询。然而,这仍然会涉及两个查询。

那么有没有更好的方法来获取每个成员的属性,最好是在一个查询中?

【问题讨论】:

  • 请贴出相关代码。
  • 我已经用相关的 PHP 更新了问题。

标签: php active-directory ldap


【解决方案1】:

很难说,但通常情况下,LDAP 结果代码 (1) 表示关联请求与正在进行的另一个操作(例如,多阶段 SASL 绑定中间的非绑定请求)的顺序不一致。它并不表示客户端发送了错误消息。

在执行查询之前你是否绑定了连接? -吉姆

【讨论】:

    【解决方案2】:

    我不确定问题到底出在哪里,在过滤器或属性选择中。如果是归因选择。如果是过滤器,那么我建议您现在将属性选择放在一边,以隔离问题。

    你能显示你正在执行的相关ldap_search()的代码吗?

    【讨论】:

    • 我已经用相关的 PHP 更新了这个问题。其他过滤器可以很好地处理这些属性,并且仅使用 array('mail') 或属性的空数组并不能消除错误结果,所以我确定问题出在我的过滤器而不是连接或属性上设置。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-27
    相关资源
    最近更新 更多