我需要通过检查指定域中是否存在这样的用户名来验证LDAP用户。为此,我使用此代码 -
DirectoryEntry entry = new DirectoryEntry("LDAP://" + strDomainController);
DirectorySearcher searcher = new DirectorySearcher(entry);
searcher.Filter = "SAMAccountName=" + strUserName;
SearchResult result = searcher.FindOne();
return (result != null) ? true : false;
这是一个类库中的方法,我打算在我的项目中需要这个功能时引用和使用它。
为了测试这个,我创建了一个简单的测试应用程序。测试就像这样 -
Console.WriteLine(MyClassLib.MyValidateUserMethod("UserName", "Domain",ref strError).ToString());
我面临的问题是,当我使用我的testapp进行测试时,这种方法正常,但在我的项目中,当我尝试使用相同凭据的相同方法时,DirectoryEntry
对象会抛出{{1异常和"System.DirectoryServices.DirectoryServicesCOMException"
失败并抛出ex = {“登录失败:未知用户名或密码错误。\ r \ n”}异常。
我尝试过冒充,但这没有用。不知何故,同样的方法在mytestapp中工作正常,并且在我的项目中不起作用。这两个应用程序都在我的本地开发机器中。我错过了什么?有什么想法吗?
答案 0 :(得分:1)
我尝试了几乎所有可能的解决方案,我可以在每个这样的线程上找到但我仍然无法解决它。
我试图重做整个事情,然后它起作用了。我认为,负责它与我的测试应用程序而不是我的项目的原因是我的项目存储在网络位置,我的测试应用程序存储在我的PC硬盘中。
当我将项目复制到我的PC硬盘上时,我的项目开始正常工作。我最好的猜测是,由于项目位于网络上,因此可能没有为LDAP验证授予足够的权限。
答案 1 :(得分:0)
您确定您的测试应用程序和您的实际应用程序是否以同一用户身份运行,因此它们在AD中具有相同的权限?虽然DirectoryEntry对象抛出的异常很难排除故障,但这是我要检查的第一件事。它是一个什么样的项目 - 网络应用程序或桌面应用程序?如果它是一个Web应用程序,那么运行应用程序池的用户可能没有必要的权限。