PrincipalContext.ValidateCredentials失败,并显示“服务器无法处理目录请求。”

时间:2019-01-12 07:50:19

标签: c# .net authentication active-directory domaincontroller

我有一个应用程序,用户可以通过它对我们的Active Directory进行身份验证:

private bool Authenticate()
{
     using (var context = new PrincipalContext(ContextType.Domain, Environment.UserDomainName)) 
     {
         return context.ValidateCredentials(this.Username.Text.Trim(), this.Password.Text.Trim());
     }
}

几年来一切正常。现在,我们的Windows 7计算机被Windows 10取代,一些用户遇到此错误:

  

服务器无法处理目录请求。

     

在System.DirectoryServices.Protocols.ErrorChecking.CheckAndSetLdapError(Int32错误)
  在System.DirectoryServices.Protocols.LdapSessionOptions.FastConcurrentBind()
  在System.DirectoryServices.AccountManagement.CredentialValidator.BindLdap处(NetworkCredential凭据,ContextOptions contextOptions)
  在System.DirectoryServices.AccountManagement.CredentialValidator.Validate(String userName,String password)
  在System.DirectoryServices.AccountManagement.PrincipalContext.ValidateCredentials(字符串userName,字符串密码)处
  在c:\ Developing \ Source \ DPI \ Client \ DPI \ FormLogin.cs:line 280中的DPI.FormLogin.Authenticate()处

该错误仅对某些用户显示,而不是一直显示。也许它与安全设置有关,现在在Win 10上要比以前在Win 7上严格得多。

任何想法如何解决?如何询问当前连接的LDAP服务器?也许我们的服务器配置略有不同,并且问题仅限于可能配置错误的单个服务器。

1 个答案:

答案 0 :(得分:1)

是的,添加ContextOptions.Negotiate解决了该问题:

private bool Authenticate()
{
     using (var context = new PrincipalContext(ContextType.Domain, Environment.UserDomainName)) 
     {
         return context.ValidateCredentials(this.Username.Text, this.Password.Text, ContextOptions.Negotiate);
     }
}