2

我需要通过检查指定域中是否存在这样的用户名来验证 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对象抛出"System.DirectoryServices.DirectoryServicesCOMException"异常并且search.Filter失败并抛出 ex = {"Logon失败:未知用户名或错误密码。\r\n"} 异常。

我尝试过模仿,但这无济于事。不知何故,相同的方法在 mytestapp 中运行良好,但在我的项目中不起作用。这两个应用程序都在我的本地开发机器中。我错过了什么?有任何想法吗?

4

2 回答 2

1

我尝试了几乎所有可能的解决方案,我可以在每个这样的线程上找到,但我仍然无法解决它。

我试图重做整个事情,然后它起作用了。我认为,它与我的测试应用程序而不是我的项目一起工作的原因是我的项目存储在网络位置,而我的测试应用程序存储在我的 PC 硬盘驱动器中。

当我将我的项目复制到我的 PC 硬盘驱动器时,它开始与我的项目正常工作。我最好的猜测是,由于该项目位于网络上,因此可能没有为 LDAP 验证授予足够的权限。

于 2010-05-21T14:47:21.813 回答
0

您确定您的测试应用程序和您的真实应用程序以同一用户身份运行,因此它们在 AD 中具有相同的权限吗?尽管 DirectoryEntry 对象抛出的异常很难解决,但这是我要检查的第一件事。它是一个什么样的项目 - Web 应用程序或桌面应用程序?如果它是一个 Web 应用程序,那么运行应用程序池的用户可能没有必要的权限。

于 2010-05-13T07:16:44.610 回答