当提供错误密码的次数足以触发锁定时,我正在测试 .net LDAP 客户端的行为。
我看到了这种奇怪的行为:似乎如果进程在任何时候成功连接,那么即使在故意触发锁定之后它也能够重新连接。
这是我的绑定方法的简写版本:
private DirectoryEntry Bind(string userId, string password)
{
var entry = new DirectoryEntry(BasePath, userId, password);
// If the password is bad, the attempt to access entry.NativeObject throws an exception.
var obj = entry.NativeObject; // causes the bind to occur
return entry;
}
我的测试进行如下:
private void TestLockout()
{
// attempt with bad pw enough times to trigger a lockout.
for (int i=0; i < 5; i++)
{
try
{
// i.ToString() is a purposefully bad pw
Bind("testuser", i.ToString());
}
catch
{
}
}
// Now make sure that an attempt with a good pw fails due to lockout
var bindSuccess = true;
try
{
Bind("testuser", "correctpassword");
}
catch
{
bindSuccess = false;
}
// the output should be "false"
Console.WriteLine("Bind result is " + bindSuccess.ToString();
}
这工作正常。但是,如果在测试之前使用正确的密码调用 Bind(),我会得到不同的结果。
爱荷华,这个:
Bind("testuser", "correctpassword"); // succeeds
TestLockout(); // does not give the correct result
发生以下情况。
a) TestLockout 产生不正确的输出,因为最终的 Bind 成功并且它不应该成功。
b) 然而,我知道该用户被锁定,因为随后的检查。
因此,似乎某些组件正在跟踪当前进程是否已成功连接。我需要有办法清除这种情况。此身份验证代码将在长时间运行的服务进程中执行,并且在用户真正被锁定时对其进行身份验证是不可接受的。