在.NET Framework中支持LDAP

时间:2012-01-02 09:39:45

标签: .net .net-4.0 active-directory ldap directoryservices

我正在使用System.DirectoryServices查询活动目录,以在winforms appliation中验证/获取用户的信息。如下所示:

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的任何技术?

3 个答案:

答案 0 :(得分: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。

答案 1 :(得分:1)

您应该将过滤器更改为:

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

但是,这并不适用于任何LDAP目录。例如,sAMAccountName是AD特定属性。

答案 2 :(得分:0)

我最后一次尝试将system.directoryservices与Novell网络一起使用时,它完全无法正常工作,异常只会被抛到各处。对不起我对版本号更具体。