我正在尋找用戶在Active Directory中所屬的所有組的列表,它們都在memberOf屬性列表中顯式列出,并且通過(guò)嵌套的組成員身份隱式列出。例如,如果我檢查UserA并且UserA是GroupA和GroupB的一部分,那么如果GroupB是GroupC的成員,我也想列出GroupC。為了使您對(duì)我的應(yīng)用程序有更多了解,我將在有限的基礎(chǔ)上進(jìn)行此操作。基本上,我偶爾需要進(jìn)行安全檢查,該檢查將列出這些其他成員身份。我將要區(qū)分兩者,但這并不難。我的問(wèn)題是我還沒(méi)有找到一種有效的方法來(lái)使此查詢工作。Active Directory上的標(biāo)準(zhǔn)文本(此CodeProject文章)顯示了一種執(zhí)行此操作的方法,該方法基本上是遞歸查找。這似乎效率極低。即使在我的小型域中,用戶也可能擁有30多個(gè)組成員身份。這意味著一個(gè)用戶需要30多個(gè)Active Directory調(diào)用。我研究了以下LDAP代碼以一次獲取所有memberOf條目:(memberOf:1.2.840.113556.1.4.1941:={0})其中{0}是我的LDAP路徑(例如:CN = UserA,OU = Users,DC = foo,DC = org)。但是,它不返回任何記錄。即使該方法可行,它的缺點(diǎn)是我不知道哪個(gè)組是顯式的,哪個(gè)組是隱式的。到目前為止,這就是我所擁有的。我想知道是否有比CodeProject文章更好的方法,如果可以的話,如何實(shí)現(xiàn)(實(shí)際代碼會(huì)很棒)。我正在使用.NET 4.0和C#。我的Active Directory處于Windows 2008功能級(jí)別(尚不是R2)。
3 回答

肥皂起泡泡
TA貢獻(xiàn)1829條經(jīng)驗(yàn) 獲得超6個(gè)贊
遞歸使用ldap過(guò)濾器,但查詢每次查詢后返回的所有組,以減少往返次數(shù)。
例如:
獲取用戶所屬的所有組
獲取步驟1組為成員的所有組
獲取步驟2組為成員的所有組
...
以我的經(jīng)驗(yàn),很少有超過(guò)5個(gè),但絕對(duì)應(yīng)該少于30個(gè)。
也:
確保只拉回您需要的屬性。
緩存結(jié)果可以極大地提高性能,但會(huì)使我的代碼復(fù)雜得多。
確保使用連接池。
主要小組必須分開(kāi)處理
- 3 回答
- 0 關(guān)注
- 574 瀏覽
添加回答
舉報(bào)
0/150
提交
取消