C# C中的ActiveDirectory入门#

C# C中的ActiveDirectory入门#,c#,.net,authentication,active-directory,ldap,C#,.net,Authentication,Active Directory,Ldap,我正在开发一个用C#和WPF编写的.NET应用程序。在此应用程序中,我们将向服务器验证用户。最后,我们可能还希望支持其他实现,因此,如果我可以在不特定于ActiveDirectory的情况下构建它,这将是一个优势 开始这项工作的最佳方法是什么?有什么好的资源我应该查一下吗?我听说.NET中有一个用于处理与Active Directory通信的库,或者有一个通用的LDAP库?任何建议都将不胜感激 注意:我使用的是.NET3.5。.NET3.5通过添加名称空间,使这比以前容易得多。除非您不在.NET

我正在开发一个用C#和WPF编写的.NET应用程序。在此应用程序中,我们将向服务器验证用户。最后,我们可能还希望支持其他实现,因此,如果我可以在不特定于ActiveDirectory的情况下构建它,这将是一个优势

开始这项工作的最佳方法是什么?有什么好的资源我应该查一下吗?我听说.NET中有一个用于处理与Active Directory通信的库,或者有一个通用的LDAP库?任何建议都将不胜感激


注意:我使用的是.NET3.5。

.NET3.5通过添加名称空间,使这比以前容易得多。除非您不在.NET3.5上,否则我将直接进入这个名称空间。像往常一样,他已经做到了

简单性示例,验证用户:

var pc = new PrincipalContext(ContextType.Domain, "MyDomain", "DC=MyDomain,DC=com");
return pc.ValidateCredentials(username, pass);

您需要使用
System.DirectoryServices
assembly。以下是一些示例:

如果您使用的是.NET 3.5,一定要查看
System.DirectoryServices.AccountManagement
命名空间-它使事情比以前简单多了

另外,请查看这篇MSDN关于此主题的文章-强烈推荐


如果您需要保持“通用性”并支持其他LDAP目录,您可能还需要查看哪个是Microsoft.NET程序集和名称空间,它处理较低级别的LDAP调用,并且应该适用于任何符合LDAP的目录(Sun、Novell等)

如果可能,我会避免使用System.DirectoryServices.AccountManagement。它看起来确实让事情变得更简单,但我遇到了很多问题(比如它有时会忽略指定的端口),而且它实际上只是System.DirectoryServices的一个简单包装。尽管您可能很幸运地使用了其他LDAP目录,但它肯定不是为它而设计的

我建议大会。开始使用它有点困难,也需要更多的努力,但您会发现它更灵活,性能更好,并且更符合标准。我已经在许多不同的目录中成功地使用了它,包括广告


MSDN有一个非常好的解决方案,它将涵盖您可能需要的大多数场景。

您可以参考我的基于ActiveRecord模式的OSS项目,如下所示(由于它是开源的,您可以了解如何使用DirectoryEntry操作AD,DirectoryEntry不仅支持LDAP协议,还支持IIS、WIN等,因此我开发了这个库):

你会发现用它来操作广告很容易,如果你对它不感兴趣,请忽略我的回答。 有关广告的任何问题,请与我联系:)

using (var userObject = UserObject.FindOneByCN(this.ADOperator, “pangxiaoliang”))
{
     if(userObject.Email == "example@landpy.com")
     {
          userObject.Email = "mv@live.cn";
          userObject.Save();
     }
}