.net ValidateCredentials的问题为Administrator以外的任何用户抛出异常

时间:2011-11-10 17:14:18

标签: c# .net windows-server-2008

我有以下设置。

Windows 2008服务器,它不属于域,但在计算机上本地配置了许多用户(我们不使用活动目录)。我有一个应用程序在网络上的另一台计算机(当前是Windows XP)上运行,该计算机必须验证用户是否在我们的2008服务器上拥有有效凭据。

我尝试了很多不同的组合,但是无法让事情发挥作用,并且已经用尽了很多东西。我目前正在运行以下代码,无法弄清楚为什么它只适用于管理员用户。

PrincipalContext pc = new PrincipalContext(ContextType.Machine, "machineName");
//returns true
bool test1 = pc.ValidateCredentials("Administrator", "aValidPassword");
//returns false
bool test2 = pc.ValidateCredentials("Administrator", "anInvalidPassword");
//throws an exceptoin for any valid username/password combination I send
bool test3 = pc.ValidateCredentials("anotherUser", "aValidPassword");

上述代码在尝试验证管理员时正常工作,但如果我尝试验证该计算机上的任何其他用户,则会出现以下异常。

System.UnauthorizedAccessException: General access denied error
at System.DirectoryServices.AccountManagement.UnsafeNativeMethods.IADs.Get(String bstrName)
at System.DirectoryServices.AccountManagement.CredentialValidator.BindSam(String target, String userName, String password)
at System.DirectoryServices.AccountManagement.CredentialValidator.Validate(String userName, String password)
at System.DirectoryServices.AccountManagement.PrincipalContext.ValidateCredentials(String userName, String password)

我还应该提到“anotherUser”也是2008服务器的管理员。为什么只能验证管理员用户?我尝试了几个不同的非管理员帐户,但没有一个工作。我肯定知道我使用的用户名/密码是有效的,用户没有被禁用或类似的东西。我没有任何运气谷歌搜索解决方案,可能是因为这应该是如此简单,我必须遗漏一些明显的东西...任何帮助将不胜感激。

(编辑添加以下段落)

我仍然没有想出这个问题,但我想我会跟进,希望有人会帮忙,我不知所措。发生了什么事很奇怪。我正在查看事件查看器 - > Windows日志 - >安全性,看它是否有助于指出问题。奇怪的是,在那些日志中,一切都被报告为成功,并且没有指出任何问题。尽管如此,我仍然在我的C#客户端上收到带有“General access denied error”消息的UnauthorizedAccessException。我还注意到异常的来源是“Active Directory”,尽管我们没有使用活动目录(服务器甚至不在域上,它只在工作组上)。有谁知道我怎么可能在事件查看器中获得成功日志但是我仍然在客户端中获得例外?

(编辑添加以下段落)

有趣的是,如果我使用无效的密码为我的“anotherUser”帐户调用ValidateCredentials,它不会抛出异常并正确返回false。当密码正确时,它会继续抛出异常。有谁知道为什么会这样?这根本没有意义,我真的不想依赖这种奇怪的行为,我想知道为什么成功的调用会抛出异常并修复根本原因......

谢谢!

(编辑纠正错误,我说第三个调用在实际抛出异常时返回false)

0 个答案:

没有答案