我打电话LogonUser尝试验证的一组凭据返回true:的LogonUser为禁用的帐户
LogonUser("forest", "avatopia.com" "stapler",
LOGON32_LOGON_NETWORK, LOGON32_PROVIDER_WINNT50, out token);
,并返回真,即使该帐户已禁用:
我也尝试过使用SSPI directly to validate credentials,这 需要调用:
AcquireCredentialsHandle(..., "Negotiate", SECPKG_CRED_OUTBOUND, ..., ["forest", "stapler", "avatopia.com"], ...)
InitializeSecurityContext(...)
AcquireCredentialsHandle(..., "Negotiate", SECPKG_CRED_INBOUND, ...)
AcceptSecurityContext(...)
InitializeSecurityContext(...)
AcceptSecurityContext(...)
在大多数机器上,如果用户帐户被禁用,初始呼叫
AcquireCredentialsHandle
将失败 。但在这个特定的机器上,我 测试它完成整个周期和工作。
如果我无效密码尝试然后LogonUser
没有(正确)失败:
LogonUser("forest", "avatopia.com" "adf342sdf3",
LOGON32_LOGON_NETWORK, LOGON32_PROVIDER_WINNT50, out token);
回报假,并GetLastError
回报1326
(登录失败:未知的用户名或密码)
试图SSPI使用无效密码也(正确)失败:
AcquireCredentialsHandle(..., "Negotiate", SECPKG_CRED_OUTBOUND, ..., ["forest", "adf342sdf3", "avatopia.com"], ...)
InitializeSecurityContext(...)
AcquireCredentialsHandle(..., "Negotiate", SECPKG_CRED_INBOUND, ...)
AcceptSecurityContext(...)
失败与8009030C
(登录尝试失败)
什么是aggrevating是,这种行为只发生在一台机器。
为什么LogonUser
以及整个安全支持提供程序接口指示特定加入域的计算机上禁用帐户的密码:有效?
- 加入域的计算机,其中
LogonUser
(错误地)成功:Windows XP SP2的 - 加入域的计算机,其中
LogonUser
(正确)将失败:Windows XP SP2的
更新:
没有本地用户调用Forest
:
也没有任何本地用户名为Forest
:
这是无关紧要的,因为我要求avatopia.com\Forest
,而不是speeder\Forest
。
oi vay仅仅因为禁用用户被允许访问他们本不应该访问的东西,人们就把他们的内裤放在一堆。
也许有一个同名的本地用户在域用户处于活动状态时被禁用?对我来说,看起来你正在查看本地管理管理单元中的用户。这是否也显示禁用的域用户? – 2012-03-19 14:09:44
@ThorstenDittmar我检查了;我会添加屏幕截图到问题。 – 2012-03-19 14:11:54
也许是一个愚蠢的问题,但是当这种情况发生时,你可以从那台机器到达域控制器吗?可能正在使用缓存的凭据。 – Luke 2012-03-20 14:25:49