簡體   English   中英

LDAP DN搜索成員

[英]LDAP DN search memberof

目前,我正在嘗試確定用戶是否應該能夠使用LDAP登錄。 我已經閱讀了許多用PHP編寫的LDAP連接,到目前為止,一切都進展順利,直到我想搜索用戶是否屬於某個組中為止。

詳細信息我目前必須連接到LDAP服務器:

  • DN:CN = PAY LDAP用戶,OU =付費,OU =應用程序,OU = IT特價,DC =域,DC =是
  • SAM:管理員
  • PWD:密碼
  • 搜索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屬性來查找用戶是否屬於組。

幾件事:

  1. 如果用戶不是任何組的成員,則memberOf屬性將不存在。
  2. 內置組不會顯示在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_list而不是ldap_search 兩者之間的唯一區別是搜索范圍。 我認為ldap_search可能仍然有效,但這不是必需的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM