首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >LDAP DN搜索成员

LDAP DN搜索成员
EN

Stack Overflow用户
提问于 2016-05-15 17:13:52
回答 1查看 2.7K关注 0票数 0

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

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

  • DN: CN=PAY LDAP用户,OU=pay,OU=Applications,OU=IT专用,DC=domain,DC=be
  • 山姆:管理员
  • PWD:密码
  • 搜索DN ADM: OU=OU组,OU=AD,DC=domain,DC=be
  • LDAP / GC服务器: knt-adm-dc1.domain.be,knt-adm-dc2.domain.be

但是,这段代码不返回任何结果:

代码语言:javascript
复制
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时,我确实得到了一个结果,尽管我似乎找不到方法来确定这个用户是管理组的一部分。

但是,从我可以在网上读到的内容来看,应该使用成员属性来查找用户是否是组的一部分。

EN

回答 1

Stack Overflow用户

发布于 2016-05-16 17:46:02

几件事:

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

一种更可靠的方法是使用一个有点模糊的LDAP筛选器来搜索您的组和任何嵌套组,以查找用户: LDAP_MATCHING_RULE_IN_CHAIN规则。详细信息这里

在PHP中,它看起来如下(未经测试):

代码语言:javascript
复制
$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_search可能仍然有效,但它并不需要。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37241296

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档