簡體   English   中英

使用LDAP函數獲取PHP中的Active Directory tokenGroups屬性

[英]Using LDAP functions to get Active Directory tokenGroups attribute in PHP

問候,

我已經與AD建立了有效的連接,並且可以從中搜索和檢索信息。 我什至開發了一種遞歸方法,通過該方法可以檢索給定用戶的所有組。 但是,如果可能,我想避免遞歸。 一種方法是從用戶的AD獲取tokenGroups屬性,該屬性應該是指定用戶具有成員身份的組的SID列表,無論該成員身份是直接成員身份還是間接成員身份。

但是,當我搜索用戶的AD信息時,tokenGroups屬性甚至不在其中。 我嘗試專門要求提供該信息(即,使用ldap_search的第四個參數指定該信息),但這也不起作用。

謝謝大衛·基斯


解決了我自己的問題,並認為我會將答案放在這里,以便其他人可以找到它。 問題是使用l​​dap_search()函數。 答案是使用ldap_read()函數而不是ldap_search()。 不同之處在於請求的范圍。 搜索功能使用“子”范圍(即子樹),而讀取功能使用“基”范圍。 僅在使用“基本”范圍時才能找到tokenGroups信息,因此使用正確的PHP函數是關鍵。

如上所述,我正在使用perl中的其他代碼來創建我的解決方案,並且perl腳本使用了一個名為“ search”的函數來執行LDAP請求,這導致我走錯了路。

感謝那些偷看了這個問題的人!

-

根據注釋中的要求,這是代碼中解決方案的基礎。 我正在從使用的對象中提取數據,所以它可能不是100%,但是會很接近。 另外,您要弄清楚在此摘要中未聲明的變量(例如$ server,$ user,$ password); 無論如何,我不會知道您的廣告憑據!

$ldap = ldap_connect($server);
ldap_bind($ldap, $user, $password);
$tokengroups = ldap_read($ldap, $dn, "CN=*", array("tokengroups")));
$tokengroups = ldap_get_entries($ldap, $tokengroups);

此時, $tokengroups是我們作為數組的結果。 它應該具有計數索引以及其他一些信息。 要提取實際的組,您需要執行以下操作:

$groups = array();
if($tokengroups["count"] > 0) {
    $groups = $tokengroups[0]["tokengroups"];
    unset($groups["count"]);

    // if you want the SID's for your groups, you can stop here.
    // if you want to decode the SID's then you can do something like this.
    // the sid_decode() here: http://www.php.net/manual/en/function.unpack.php#72591

    foreach($groups as $i => &$sid) {
        $sid = sid_decode($sid);

        $sid_dn = ldap_read($ldap, "<SID=$sid>", "CN=*", array("dn"));
        if($sid_dn !== false) {
            $group = ldap_get_entries($ldap, $sid_dn);
            $group = $group["count"] == 1 ? $group[0]["dn"] : NULL;
            $groups[$i] = $group;
        }
    }
}

這就是基礎。 有一個警告:您可能需要與組織中管理AD帳戶的一個或多個個人合作。 我第一次嘗試運行該命令(幾年前,所以我的記憶有些模糊),我獲得的帳戶沒有訪問令牌組信息的適當授權。 我敢肯定還有其他方法可以做到這一點,但是由於我正在為該特定解決方案移植其他人的代碼,因此我就是這樣做的。

暫無
暫無

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

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