目前,我正试图确定用户是否应该能够使用LDAP登录。我已经阅读了许多用PHP编写的LDAP连接,直到我想搜索某个用户是否属于某个组为止,事情一直在进行。
详细信息,我目前必须连接到LDAP服务器:
但是,这段代码不返回任何结果:
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时,我确实得到了一个结果,尽管我似乎找不到方法来确定这个用户是管理组的一部分。
但是,从我可以在网上读到的内容来看,应该使用成员属性来查找用户是否是组的一部分。
发布于 2016-05-16 17:46:02
几件事:
memberOf属性将不存在。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_search可能仍然有效,但它并不需要。
https://stackoverflow.com/questions/37241296
复制相似问题