使用C#开始使用ActiveDirectory

8

我正在开发一个使用C#和WPF编写的.NET应用程序。在此应用程序中,我们将向Active Directory服务器验证用户。最终,我们可能还想支持其他LDAP实现,因此如果我可以构建不特定于ActiveDirectory的解决方案,那将是一个优势。

最好的入门方法是什么?有任何好的资源我应该查看吗?我听说过在.NET中处理与Active Directory通信的库-或者是否有一般的LDAP库?任何建议都将不胜感激!

注意:我正在使用.NET 3.5。

5个回答

5

.NET 3.5通过添加System.DirectoryServices.AccountManagement名称空间大大简化了此过程。除非您没有使用.NET 3.5,否则我建议直接使用此名称空间。通常情况下,The Code Project有一些示例用法展示

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

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

4
我建议尽可能避免使用System.DirectoryServices.AccountManagement。它看起来确实能使事情变得更容易,但我遇到了许多问题(例如有时会忽略指定的端口),而且它只是System.DirectoryServices的轻量级包装器。虽然您可能会在其他LDAP目录中使用它,但它显然不是为此而设计的。
我建议使用System.DirectoryServices.Protocols程序集。它有点难以入手,也需要更多的努力,但您会发现它更加灵活,性能更好,并且更符合标准。我已经成功地将其用于许多不同的目录,包括AD。
MSDN有一篇很棒的introduction article,涵盖了您可能需要的大多数场景。

2
如果你正在使用 .NET 3.5,一定要查看 System.DirectoryServices.AccountManagement 命名空间——它使得事情比以前更容易了!
此外,请查看这篇MSDN文章 Managing Directory Security Principals in the .NET Framework 3.5 ,强烈推荐!
如果你需要保持“通用”并支持其他LDAP目录,你可能还想看看Introduction to System.DirectoryServices.Protocol。这是微软的 .NET 程序集和命名空间,处理低级别的LDAP调用,并应该适用于任何LDAP兼容的目录(Sun、Novell等)。

1

0
您可以参考我的基于ActiveRecord模式的开源项目,如下所示(因为它是开源的,您可以找到如何使用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();
     }
}

https://landpyactivedirectory.codeplex.com/documentation

如果您对AD不感兴趣,请忽略我的回答。如果您有任何有关AD的问题,请与我联系,我很乐意为您解答 :)

您将会发现使用它来操作AD会变得非常容易。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接