簡體   English   中英

使用LDAP和PHP檢查Active Directory中的組成員身份

[英]Checking for group membership in Active Directory using LDAP and PHP

我是LDAP和Active Directory的新手,我認為這應該是一個簡單的問題。 我使用以下代碼連接到AD:

$ad = ldap_connect("domain.com") or die("Could not connect to AD");
//bind to the server
$uname = $uid . "@domain.com";
if (!ldap_bind($ad, "$uname", "$pwd") and $uid != "guest") {
    code...
}

我需要檢查用戶是否是三個組中的一個成員:ECSDocket_Admin,ECSDocket_User或ECSDocket_Viewer。 我一直在搜索,我發現的大部分答案都在他們的查詢中使用CN =和DN =和DC =,但我不知道這些是什么意思。 如果有人可以解釋它是如何工作的,以及我需要做些什么來弄清楚團隊成員資格,那就太棒了!

我不熟悉PHP訪問LDAP / Active Directory的實現,所以我無法幫助你。 我可以幫助你的是或許了解從哪里獲取域結構信息,以便連貫地匯集所有CN,OU,DN的東西。

登錄到其中一個域控制器的控制台,然后打開“Active Directory用戶和計算機”管理員工具。

在左側窗口中,頂部的窗格將是您的域名,例如:somedomain.com記下您的域名。

現在,您需要在域結構中找到ECSDocket_Admin,ECSDocket_User和ECSDocket_Viewer組對象的位置。

點擊您域名旁邊的+(加號)符號(如果尚未登錄)。 你應該看到一堆文件夾(實際上是OU和目錄,但我會保持簡單)。 您正在尋找的群組將位於其中一個“文件夾”中,很可能位於名為“用戶”的群組中,因此請開始查看。

記下您找到該組的“路徑”,從頂部的“somedomain.com”開始,然后通過文件夾進行操作。 例如:somedomain.com/users/etc/ECSDocket_Admin

要查詢組對象,您需要知道它的可分辨名稱(DN)。 使用您收集的有關您的域名和位置的信息,您可以為每個組合組裝DN,如下所示:

注意:我正在使用一組示例路徑:somedomain.com/users/etc/ECSDocket_Admin

DN值為: CN = ECSDocket_Admin,OU = etc,OU = users,DC = somedomain,DC = com

- 注意我們從對象名稱'ECSDocket_Admin'開始並按照我們的方式向上推進樹(在查看我寫下的路徑時反向順序)!

- 注意只是組名稱以CN =為前綴

- 注意所有'文件夾'名稱都以OU =為前綴

- 注意我們在點分隔符處分割我們的域名,並使用DC =為每個部分添加前綴

- 注意DN值中的所有內容都用逗號分隔(,)

您可能需要的其他項目的值為:

使用somedomain.com域名作為示例,“搜索庫”或目錄中開始搜索的點將是: DC = somedomain,DC = COM

搜索范圍將是: sub ,它只是說可以查看起點下面的所有“文件夾”

一旦弄清楚如何查詢組對象,您特別感興趣的屬性值稱為“成員”。 此屬性包含多個值,每個用戶對應一個組成員。 這些值將是用戶帳戶的DN。 您將感興趣的部分將是開頭的CN = SOMEUSER部分,因為這是用戶帳戶名稱。 其余的是此帳戶對象存儲在域結構中的“路徑”。

希望能幫助到你。

如果有人關心,我能夠做這樣的搜索:

$dn = "CN=$uid,CN=Users,DC=domain,DC=com";
$filter = "(memberOf=CN=ECSDocket_Admin,OU=Groups,DC=domain,DC=com)";
$justthese = array("memberOf");

$sr = ldap_search($ad, $dn, $filter, $justthese);
$info = ldap_get_entries($ad, $sr);
echo $info["count"]." entries returned.\n";

通過檢查計數,我能夠確定輸入的用戶名是否是該組的一部分 - 如果有一個,那么它是該組的一部分,因為我已經在該用戶名下使用了ldap_connect來檢查它是否是在AD內有效。 對於過濾器,由於memberOf是一個數組,您需要指定整個路徑。 例如,如果您只需要查詢sn(姓氏),您可能只需要:

$filter = "(sn=smith)";

幫助我確切了解正確屬性的網站是: http//www.selfadsi.org/user-attributes-w2k8.htm

暫無
暫無

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

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