簡體   English   中英

PrincipalContext.ValidateCredentials失敗,顯示“服務器無法處理目錄請求。”

[英]PrincipalContext.ValidateCredentials fails with “The server cannot handle directory requests.”

我有一個應用程序,用戶可以根據我們的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,字符串密碼)
在DPI.FormLogin.Authenticate()中位於c:\\ Developing \\ Source \\ DPI \\ Client \\ DPI \\ FormLogin.cs:line 280

該錯誤僅對某些用戶顯示,而不是一直顯示。 可能與安全設置有關,現在在Win 10上要比以前在Win 7上嚴格得多。

知道如何解決嗎? 如何詢問當前連接的LDAP服務器? 也許我們的服務器配置略有不同,問題僅限於可能配置錯誤的單個服務器。

是的,添加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);
     }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM