【问题标题】:How to check if LDAP user exists/active?如何检查 LDAP 用户是否存在/活动?
【发布时间】:2012-03-08 15:39:04
【问题描述】:

我正在使用 C# 应用程序来验证和检查位于 Window 2008 64 位服务器上的 Active Directory 用户。

使用以下代码提供用户名和密码时,我能够成功验证用户身份:我的 domainName 值为 rootforest.com,我的 userName 为 admin6

        UserPrincipal usr;
        PrincipalContext ad;

        //Enter Active Directory settings
        ad = new PrincipalContext(ContextType.Domain, domainName,usrName,pswd);

        //search user
        usr = new UserPrincipal(ad);
        usr.SamAccountName = usrName;

        PrincipalSearcher search = new PrincipalSearcher(usr);
        usr = (UserPrincipal)search.FindOne();
        search.Dispose();

在另一个函数中,我想检查用户 'admin6' 是否存在并且我没有密码,但是当我检查它时,该函数不断抛出“登录失败:未知用户名或密码错误。\r\n ”。除了这一行之外,我使用的代码几乎与上面相同:

        //Enter Active Directory settings
        ad = new PrincipalContext(ContextType.Domain, domainName);

这不起作用,我尝试了在网上找到的其他代码,但它们都给了我同样的错误。我开始认为这可能是我设置 Active Directory 域的方式?

下图是我的域名的样子:

https://picasaweb.google.com/100922945973553878191/ActiveDirectory?authuser=0&feat=directlink

谁能帮我解决这个问题?我在最后一天左右一直被这个问题困扰,我似乎无法找出原因。如果你有一些代码,我可以试试它会很棒

【问题讨论】:

    标签: c# active-directory ldap


    【解决方案1】:

    要检查用户是否存在,您的代码必须使用已知的专有名称执行基本级别的搜索。如果搜索结果成功并且作为搜索结果的一部分返回的条目数大于 1,则该可分辨名称存在于目录数据库中。

    这不同于通过绑定请求来建立连接的身份验证状态。如果绑定请求成功,则根据绑定中使用的专有名称设置连接的身份验证状态。

    也许您应该使用命令行ldapsearch 工具检查可分辨名称的状态。这将使您确信可分辨名称存在,以及凭据是否正确,并且目录权限允许您尝试完成的操作。一旦您对专有名称和凭据的存在感到满意,您就可以继续对代码进行故障排除。

    【讨论】:

    • 我在一台窗口机器上,所以我下载了 LDAPSoft AD 管理工具来检查我的连接,我可以看到我对帐户 'admin6' 的 distinctName 是 CN=admin6,CN=Users,DC=rootforest ,DC=com。我尝试在我的代码中使用它,例如 if(DirectoryEntry.Exists("LDAP://CN=admin6,CN=Users,DC=rootforest,DC=com)) 或 if(DirectoryEntry.Exists("LDAP:// DC=rootforest,DC=com)) 但还是没有运气
    猜你喜欢
    • 1970-01-01
    • 2016-05-29
    • 1970-01-01
    • 2019-11-26
    • 1970-01-01
    • 1970-01-01
    • 2015-01-13
    • 2023-01-25
    • 1970-01-01
    相关资源
    最近更新 更多