【问题标题】:What does PrincipalContext.ValidateCredentials return true for blank passwords?对于空白密码,PrincipalContext.ValidateCredentials 会返回什么?
【发布时间】:2013-07-23 03:41:48
【问题描述】:

我们的应用程序有一个登录框,要求用户输入他们的 AD 凭据。我们获取这些凭据,然后调用

    using (PrincipalContext pc = new PrincipalContext(ContextType.Domain, domain, container, ContextOptions.SimpleBind))
    {
        return pc.ValidateCredentials(domain + @"\" + username, password, ContextOptions.SimpleBind);
    }

验证他们是否输入了有效的登录名/密码对。但我们发现,对 ValidateCredentials 的调用将返回 true 并使用空白密码,我们不知道为什么。无效密码返回 false,但只要用户名正确,空白将返回 true。

【问题讨论】:

  • 您是否偶然以与当前登录机器进行测试的用户相同的用户(例如用户名)登录(即您以 domain\user1 登录机器而您'正在以domain\user1) 身份登录应用程序?
  • 我想知道这是否与我看到的对未知用户返回 true 的问题类似?最终找到了答案 - 与启用的访客帐户有关。有关详细信息,请参阅stackoverflow.com/a/7336610/130352
  • @ChrisJ 不,我们的一位客户有问题,访客帐户已被禁用。仍在试图弄清楚为什么接受空白密码。

标签: c#


【解决方案1】:

来自 MSDN http://msdn.microsoft.com/en-us/library/bb154889.aspx

ValidateCredentials 方法绑定到构造函数中指定的服务器。如果用户名和密码参数为空,则验证构造函数中指定的凭据。如果构造函数中没有指定凭据,并且用户名和密码参数为空,则此方法验证当前主体的默认凭据。

在 PrincipalContext 构造函数中,您也可以指定要检查的凭据。

using (PrincipalContext pc = new PrincipalContext(ContextType.Domain, domain, 
                       container, ContextOptions.SimpleBind, username, password))
{
    return pc.ValidateCredentials(domain + @"\" + username, password,
                                   ContextOptions.SimpleBind);
}

【讨论】:

  • 在 PrincipalContext 构造函数中,您使用用户名和密码连接到 LDAP 服务器。为什么你会在那之后验证凭据?这是多余的,对吧?
猜你喜欢
  • 2020-05-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多