2

我有一个 Web 应用程序,它使用 ActiveDirectoryMembershipProvider 类针对安全的 LDAP 系统创建/更新/验证用户。除了我们得到随机的“服务器不可用”之外,一切似乎都运行良好。例外。当用户收到此错误时,他们可以立即重试并且它可以工作。

我让我们的网络人员监控流量,我们注意到 Membership 对象创建了 2 个到 LDAP 的安全 TCP 连接(我们将它们称为 con1 和 con2)。两个连接似乎都保持打开状态,但只有 con2 接收到任何通信。最终 con1 会从 ldap 服务器发送一个关闭请求。此请求似乎是随机发生的。当我们看到错误时,我们通常会在错误发生之前(毫秒之前)立即看到 con1 关闭请求。

我已经阅读了 MSDN 文档,但无法弄清楚为什么它会打开 2 个连接以及为什么它不关闭它们或发送通知消息它仍在运行。有谁知道这些答案?

我的第二个问题是我能做些什么来解决这个问题?我知道我可以重新请求验证,但我不希望我必须这样做。下面是示例代码。

配置

<add name="ADConnectionString" connectionString="LDAP://FullyQualifiedServerName:636/OU=XXX,DC=XXX,DC=XXX" />
<add name="ADMembershipProvider"    
type="System.Web.Security.ActiveDirectoryMembershipProvider, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" 
 connectionStringName="ADConnectionString" 
 connectionUsername="CN=XXX,OU=XXX,DC=XXX,DC=XXX" connectionPassword="XXXXXX" 
 connectionProtection="Secure" enableSearchMethods="true" enablePasswordReset="true" 
 requiresQuestionAndAnswer="true" applicationName="XXXX" 
 description="Default AD connection" requiresUniqueEmail="false" 
 clientSearchTimeout="30" serverSearchTimeout="30" attributeMapPasswordQuestion="xxx" 
 attributeMapPasswordAnswer="xxxx" attributeMapFailedPasswordAnswerCount="xxxx" 
 attributeMapFailedPasswordAnswerTime="xxxx" 
 attributeMapFailedPasswordAnswerLockoutTime="xxxx" attributeMapEmail="mail" 
 attributeMapUsername="userPrincipalName" maxInvalidPasswordAttempts="7" 
 passwordAttemptWindow="1" passwordAnswerAttemptLockoutDuration="5" 
 minRequiredPasswordLength="8" minRequiredNonalphanumericCharacters="0" 
 passwordStrengthRegularExpression="^(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?!.*\s).{8,20}$" />

代码

return Membership.Providers["ADMembershipProvider"].ValidateUser(userName, userPassword);

环境:Windows Server 2008、IIS 7.0、.NET 4.0 注意我们目前的服务量非常低,因为我们处于一个小的 beta 窗口中。

4

1 回答 1

0

这似乎是 ActiveDirectoryMembershipProvider 类中的一个错误。我们最终切换到 Common.LdapAuth.LdapAuthProvider 类来验证用户。

于 2016-04-18T15:33:52.990 回答