PrincipalContext.ValidateCredentials如何工作?

问题描述

我已经搜索了堆栈,但是没有找到可以帮助我解决问题的答案。我们在不同的服务器上有两个Web应用程序。两者都使用完全相同的标准代码进行Active Directory身份验证。而且目标LDAP服务器在所有情况下都是相同的。

Using ctx As New PrincipalContext(ContextType.Domain) If ctx.ValidateCredentials(un_in,pw_in) Then...

但是,在一种情况下,这两行是即时执行的,而另一行则有21秒的一致延迟(在这两行之前和之后都有日志记录)。对于较慢的服务器,无论环境如何,即在我们的dev / test / stage / prod服务器上,速度都很慢。

我们对检查内容一无所知。基本的网络连接检查不会显示任何延迟,而且这种情况发生在4台不同的服务器上。与域控制器的连接,据我所知,这就是IIS如何知道可能要检查的LDAP服务器?有想法吗?

解决方法

万一有人遇到这个。解决方案是在代码中添加一个参数ContextOptions.Negotiate:

Using ctx As New PrincipalContext(ContextType.Domain)
  If ctx.ValidateCredentials(un_in,pw_in,**ContextOptions.Negotiate**) Then

网络环境中发生了无法识别的变化。但是添加这个参数消除了延迟。