我正在使用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
任何人都可以帮助我吗?我在最后一天左右一直坚持这个问题,我似乎无法找出原因。如果你有一些代码我可以尝试它会很棒
答案 0 :(得分:1)
要检查用户是否存在,您的代码必须使用已知的可分辨名称执行基本级别搜索。如果搜索结果成功并且作为搜索结果的一部分返回的条目数大于1,则目录数据库中存在可分辨名称。
这与建立使用绑定请求完成的连接的身份验证状态不同。如果绑定请求成功,则根据绑定中使用的可分辨名称设置连接的身份验证状态。
也许您应该使用命令行ldapsearch
工具检查专有名称的状态。这将使您确信存在可分辨名称,以及凭据是否正确,以及目录权限是否允许您尝试完成的任务。一旦您对可分辨名称和凭据的存在感到满意,就可以继续对代码进行故障排除。