【问题标题】:Support for LDAP in .NET Framework在 .NET Framework 中支持 LDAP
【发布时间】:2012-01-02 09:39:44
【问题描述】:

我正在使用System.DirectoryServices 查询活动目录以在 winforms 应用程序中验证/获取用户信息。如下所示:

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 的任何技术吗?

【问题讨论】:

    标签: .net .net-4.0 active-directory ldap directoryservices


    【解决方案1】:

    System.DirectoryServices 命名空间针对 Active Directory 进行了优化。它适用于其他 LDAP 服务器 - 有一定的限制。

    还有System.DirectoryServices.Protocols(参见MSDN documentationintro MSDN article)命名空间(.NET 2.0 中的新功能),它更像是一种低级 LDAP 实现——您需要做更多的工作并编写更多的代码,但是它更便携,更可能与其他 LDAP 存储一起使用。

    还有System.DirectoryServices.AccountManagement(参见MSDN documentation)命名空间(.NET 3.5 中的新功能),这是从 .NET 使用 Active Directory 的一种更好、更简单的方法 - 比 S.DS 的东西有了很大改进!但据我所知,这只是 Active Directory。

    【讨论】:

    • System.DirectoryServices 对其他 LDAP 服务器有何限制?
    • @Kamyar:这完全取决于其他 LDAP 实现——一些供应商在实现标准时略有偏差(标准几乎总是留下一些解释空间)。最值得注意的是,它不能完全对抗例如Novell NDS(声称自 NDS 7 起支持 LDAP)。 Microsoft 的 S.DS 实施,例如不支持 LDAP 中的 O=.... 元素,如果我没记错的话(Novell NDS 7 使用它)。一些用户尝试使用 S.DS 对抗 OpenLDAP,也发现了一些不一致/不兼容的问题。使用 Google 或 Bing 查找这些博客文章/文章!
    • 谢谢。如果您也看看stackoverflow.com/q/8700115/337294,将不胜感激。
    【解决方案2】:

    您应该将过滤器更改为如下所示:

    var filter = string.Format("(&(objectCategory={0})(objectClass={1})(sAMAccountName={2}))", "person", "user", username);

    不过,这通常不适用于任何 LDAP 目录。例如,sAMAccountName 是 AD 特定属性。

    【讨论】:

      【解决方案3】:

      上次我尝试将 system.directoryservices 与 Novell 网络一起使用时,它完全没有用,只是到处抛出异常。抱歉,我不能更具体地说明版本号。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-01-04
        • 1970-01-01
        • 2022-12-04
        • 2010-12-03
        • 1970-01-01
        • 2011-06-10
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多