【问题标题】:Getting started with ActiveDirectory in C#C# 中的 ActiveDirectory 入门
【发布时间】:2010-01-30 13:00:02
【问题描述】:

我正在开发一个用 C# 和 WPF 编写的 .NET 应用程序。在这个应用程序中,我们将通过Active Directory 服务器对用户进行身份验证。最后,我们可能还想支持其他 LDAP 实现,所以如果我可以在不特定于 ActiveDirectory 的情况下构建它,那将是一个优势。

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

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

【问题讨论】:

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


    【解决方案1】:

    .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);
    

    【讨论】:

      【解决方案2】:

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

      我会推荐System.DirectoryServices.Protocols 程序集。它有点难上手,也需要更多的努力,但你会发现它更灵活,性能更好,而且更符合标准。我已经在许多不同的目录(包括 AD)上使用它取得了巨大的成功。

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

      【讨论】:

        【解决方案3】:

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

        还可以查看有关该主题的这篇 MSDN 文章 Managing Directory Security Principals in the .NET Framework 3.5 - 强烈推荐!

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

        【讨论】:

          【解决方案4】:

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

          【讨论】:

            【解决方案5】:

            您可以参考我的基于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();
                 }
            }
            

            https://landpyactivedirectory.codeplex.com/documentation

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

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2015-12-07
              • 1970-01-01
              • 1970-01-01
              • 2010-10-01
              • 1970-01-01
              • 2020-08-23
              • 1970-01-01
              相关资源
              最近更新 更多