【问题标题】:LDAP DN search memberofLDAP DN 搜索成员
【发布时间】:2016-05-15 17:13:52
【问题描述】:

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

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

  • DN:CN=PAY LDAP 用户,OU=pay,OU=Applications,OU=IT 特价,DC=域名,DC=be
  • SAM:管理员
  • 密码:密码
  • 搜索 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 属性应该用于查找用户是否属于某个组。

【问题讨论】:

  • 有两种方法可以解决这个问题:读取用户本身的memberof 属性或读取组的member 属性。请注意,内置组的行为可能与用户定义的组不同。另外 - 确保您绑定的用户具有读取此属性的权限。如果您拥有管理员凭据,您可以轻松测试这是否是访问控制问题。
  • 据我所知,用户似乎没有 memberof 属性。每当我搜索 memberof 属性时,都不会返回任何内容。
  • 您是否尝试过以管理员身份搜索?您是否尝试过使用 ldp.exe 之类的工具检查条目?

标签: php active-directory ldap


【解决方案1】:

几件事:

  1. 如果用户不是任何组的成员,memberOf 属性将不存在。
  2. 内置组不显示在memberOf 属性中。

一种更防失败的方法是使用有点模糊的 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 可能仍然有效,但不是必需的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-06-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-13
    • 2010-12-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多