2012-03-08 75 views
2

我正在使用C#应用程序进行身份验证并检查位于Window 2008 64位服务器上的Active Directory用户。如何检查LDAP用户是否存在/活动?

我能够提供的用户名和使用下面的代码密码时,成功地验证用户:我则domainName值rootforest.com和我的用户名是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'是否存在,并且我没有密码,但是当我检查它时,该函数继续抛出“登录失败:unkoown用户名或错误密码。\ 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

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

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

也许您应该使用命令行ldapsearch工具检查专有名称的状态。这将使您可以确信可识别的名称存在,并且如果证书正确,并且该目录权限还允许您尝试完成的任务。一旦您对专有名称和凭据的存在感到满意,您可以继续对代码进行故障诊断。

+0

我在一个窗口机器上,所以我下载了LDAPSoft AD管理工具来检查我的连接,我可以看到我的distinguishedName到账户'admin6'是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))但仍然没有运气 – Fylix 2012-03-08 19:44:39