2012-01-02 142 views
4

我正在使用System.DirectoryServices查詢活動目錄以在WinForms應用程序中驗證/獲取用戶信息。如下所示:在.NET Framework中支持LDAP

var path = "LDAP://" + domain; 
var entry = new DirectoryEntry(path); 
DirectorySearcher myDirectorySearcher = new DirectorySearcher(entry); 
var filter = string.Format("(&(ObjectClass={0})(sAMAccountName={1}))", "person", username); 
myDirectorySearcher.Filter = filter; 

我只能在公司的Active Directory上測試此代碼。這是否會支持任何支持LDAP的技術?

回答

7

System.DirectoryServices命名空間針對Active Directory進行了優化。它可以對付其他LDAP服務器 - 具有一定的侷限性。

另外還有System.DirectoryServices.Protocols(見MSDN documentationintro MSDN article)命名空間(新的.NET 2.0),這是一個比較低層次的LDAP實現的 - 你需要做更多的工作,寫更多的代碼,但它更輕便,更可能與其他LDAP商店一起工作。

還有System.DirectoryServices.AccountManagement(參見MSDN documentation)命名空間(.NET 3.5中的新增功能),這是一種更好,更簡單的方法來使用.NET中的Active Directory - 在S.DS方面有很大改進!但就我所知,這只是Active Directory。

+0

Whata是其他LDAP服務器的'System.DirectoryServices'限制嗎? – Kamyar 2012-01-02 10:55:41

+1

@Kamyar:完全依賴於其他LDAP實現 - 一些供應商實施標準時略有偏差(標準幾乎總是留有一些解釋空間)。最顯着的是它不能完全抵抗例如Novell NDS(聲稱支持NDS 7的LDAP)。微軟的S.DS實施例如如果我沒有記錯(Novell NDS 7使用),它不支持LDAP中的O = ....元素。一些用戶嘗試使用針對OpenLDAP的S.DS,並發現一些不一致/不兼容。使用Google或Bing來查找這些博客帖子/文章! – 2012-01-02 10:57:50

+0

謝謝。如果你也看看http://stackoverflow.com/q/8700115/337294,會很感激。 – Kamyar 2012-01-02 11:11:41

1

,則應該更換過濾器看起來像這樣:

var filter = string.Format("(&(objectCategory={0})(objectClass={1})(sAMAccountName={2}))", "person", "user", username);

這不會與任何LDAP目錄一般的工作,雖然。例如,sAMAccountName是AD特定的屬性。

0

上次我嘗試在Novell網絡中使用system.directoryservices時,它完全無法工作,異常情況只是在各處引發。對不起,我不能更具體的版本號。