我正在使用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
的任何技术?
答案 0 :(得分:7)
System.DirectoryServices
命名空间针对Active Directory进行了优化。它将对其他LDAP服务器起作用 - 具有某些限制。
还有System.DirectoryServices.Protocols
(请参阅MSDN documentation和intro 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网络一起使用时,它完全无法正常工作,异常只会被抛到各处。对不起我对版本号更具体。