目前我正在尝试确定用户是否应该能够使用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时,我确实得到了一个结果,但我似乎找不到确定此用户是ADMIN组的一部分的方法。
根据我在网上阅读的内容,应该使用memberof属性来查找用户是否属于某个组。
答案 0 :(得分:0)
一些事情:
memberOf
属性将不存在。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可能仍然有用,但不需要它。