反复验证帐户是否可以登录

时间:2017-07-20 08:49:06

标签: c# active-directory directoryservices

我需要一种方法来验证AD帐户是否可以使用给定密码登录并且未被禁用。与在this answer中一样,我正在尝试使用DirectoryEntry来完成此任务:

public static bool CanLogon(string userName, string domainPath, string password) {
    try {
        using (new DirectoryEntry(domainPath, userName, password, AuthenticationTypes.Secure)) {                 
            var x = domainEntry.NativeObject; // force binding
            return true;
        }
    } catch (Exception e) {
        return false;
    }
}

但是,在以下情况下,这不起作用:

  1. 使用正确的帐户参数调用方法,因此方法返回true。
  2. 更改该帐户的密码或停用该帐户。
  3. 使用完全相同的参数再次调用该方法。即使它现在应该返回false,该方法仍然返回true。
  4. 对于适用于此案例的任何解决方案,我将不胜感激。

    分析:

    • 只有一个DC的域中也会出现问题,因此它不是复制问题。
    • 如果省略步骤1,则步骤3正确返回false,因此这似乎是一个缓存问题,尽管调用了entry.NativeObject,它应该强制实时调用AD。
    • 如果在步骤3中,userName的写入大小写与步骤1不同(例如" John.Doe" vs" john.doe"),则步骤3正确返回false,表示缓存问题。

0 个答案:

没有答案