2

Active Directoryユーザー(Win7上のVS2008)を確認するための次のコードがあります。

try
{
    PrincipalContext pc = new PrincipalContext(ContextType.Domain, strDomainName))
    isPass = pc.ValidateCredentials(strDomainUserName, strDomainUserPass);
}
catch (Exception ex)
{
    Logger.Log("authentiate domain user fail: {0},{1}", ex.ToString(), strDomainUserLoginName);
}

一部のADユーザーの場合は問題ありませんが、ADユーザーの場合は次の例外が発生します。 System.DirectoryServices.Protocols.DirectoryOperationException: The server cannot handle directory requests.

System.DirectoryServices.Protocols.ErrorChecking.CheckAndSetLdapError(Int32 error)

System.DirectoryServices.Protocols.LdapSessionOptions.FastConcurrentBind()

System.DirectoryServices.AccountManagement.CredentialValidator.BindLdap(NetworkCredential creds, ContextOptions contextOptions)

System.DirectoryServices.AccountManagement.CredentialValidator.Validate(String userName, String password)

System.DirectoryServices.AccountManagement.PrincipalContext.ValidateCredentials(String userName, String password)

では、Active Directoryドメインのユーザー設定によってそのような例外が発生しますか?

4

1 に答える 1

1

申し訳ありませんが、上記の私の説明は間違っています。実際、すべてのADユーザー検証にはそのような例外があります。

また、作業環境は次のとおりです。(1)検証コードがまさにADマシンであるマシンで実行されている場合、コードはそのような例外を受け取ります。(2)それ以外の場合、そのような例外はありません。

この問題を解決するには、ValidateCredentialsのContextOptions.Negotiateパラメーターを追加します。

于 2013-04-26T08:02:46.863 に答える