如何检查LDAP用户是否存在/活动?

时间:2012-03-08 15:39:05

标签: c# active-directory ldap

我正在使用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

任何人都可以帮助我吗?我在最后一天左右一直坚持这个问题,我似乎无法找出原因。如果你有一些代码我可以尝试它会很棒

1 个答案:

答案 0 :(得分:1)

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

这与建立使用绑定请求完成的连接的身份验证状态不同。如果绑定请求成功,则根据绑定中使用的可分辨名称设置连接的身份验证状态。

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