C#中的Active Directory入门

时间:2010-01-30 13:00:02

标签: c# .net authentication active-directory ldap

我正在研究用C#和WPF编写的.NET应用程序。在此应用程序中,我们将向Active Directory服务器的用户进行身份验证。最后,我们可能也希望支持其他LDAP实现,因此如果我可以构建它而不是特定于ActiveDirectory,那将是一个优势。

开始使用此功能的最佳方法是什么?我应该检查一下有什么好的资源吗?我听说.NET中有一个用于处理与Active Directory通信的库 - 或者是否有一个通用的LDAP库?任何建议表示赞赏!

注意:我使用的是.NET 3.5。

5 个答案:

答案 0 :(得分:5)

.NET 3.5通过添加System.DirectoryServices.AccountManagement命名空间使这变得非常容易。除非你不在.NET 3.5上,否则我会直接进入这个命名空间。像往常一样,The Code Projectsomething up showing a lot of example uses

简单示例,验证用户身份:

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

答案 1 :(得分:4)

如果可能的话,我会避免使用System.DirectoryServices.AccountManagement。它肯定会让事情变得更容易,但我遇到了很多问题(例如它偶尔会忽略指定的端口)而且它实际上只是System.DirectoryServices的一个轻量级包装器。虽然你可以幸运地使用其他LDAP目录,但它当然不是为它而设计的。

我会推荐System.DirectoryServices.Protocols程序集。开始使用起来有点困难,并且还需要更多的努力,但是你会发现它更灵活,性能更好,而且更符合标准。我在很多不同的目录中使用它取得了很大的成功,包括AD。

MSDN有一个很棒的introduction article,它将涵盖您可能需要的大多数情况。

答案 2 :(得分:2)

如果您使用的是.NET 3.5,请务必查看System.DirectoryServices.AccountManagement命名空间 - 它使事情变得比以前容易得多!

另请查看有关该主题的MSDN文章Managing Directory Security Principals in the .NET Framework 3.5 - 强烈推荐!

如果您需要保持“通用”并支持其他LDAP目录,您可能还需要查看Introduction to System.DirectoryServices.Protocol,它是处理较低级别LDAP调用的Microsoft .NET程序集和命名空间,并且应该适用于任何LDAP兼容目录(Sun,Novell等)

答案 3 :(得分:1)

您需要使用System.DirectoryServices程序集。以下是一些示例:Querying Active Directory using .NET classes and LDAP queries

答案 4 :(得分:0)

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

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

https://landpyactivedirectory.codeplex.com/documentation

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