【发布时间】:2015-05-14 17:21:43
【问题描述】:
我遇到了一个奇怪的问题。
概要
我的登录页面可以针对 SQL 用户或 AD 用户进行身份验证。要识别用户是否为 AD 用户,用户名应包含反斜杠。
SQL 的逻辑运行良好,但在针对 AD 对用户进行身份验证时,我遇到了最常见的错误 (Object reference not set to an instance of an object.)。
详情
对于 SQL 用户,我有 CustomSqlMembershipProvider()。调用是这样的:
if(Membership.Provider.ValidateUser(userName, userPassword))
userAuthenticated = true;
CustomSqlMembershipProvider() 类将凭据发送到 SQL 数据库。
对于AD 用户,我有这样的逻辑:
if (Membership.Providers["ADMembership"].ValidateUser(userName, userPassword))
userAuthenticated = true;
上面的if 语句正在生成错误Object reference not set to an instance of an object.
Web.config
<add name="ConnectionStringAD" connectionString="LDAP://it.CompanyName.local" />
...
<membership defaultProvider="CustomSqlMembershipProvider" userIsOnlineTimeWindow="30">
<providers>
<clear/>
<add name="CustomSqlMembershipProvider"
type="Authentication.MembershipProviders.CustomSqlMembershipProvider"
connectionStringName="SqlProviderConnectionString"
enablePasswordRetrieval="false"
enablePasswordReset="true"
requiresQuestionAndAnswer="false"
requiresUniqueEmail="false"
maxInvalidPasswordAttempts="5"
minRequiredPasswordLength="6"
minRequiredNonalphanumericCharacters="0"
passwordAttemptWindow="10"
applicationName="/" />
<add name="ADMembership"
type="System.Web.Security.ActiveDirectoryMembershipProvider, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
connectionStringName="ConnectionStringAD"
connectionUsername="it\LDAPuser"
connectionPassword="LDAPuserPassword"
connectionProtection="Secure"
maxInvalidPasswordAttempts="5"
attributeMapUsername="sAMAccountName" />
</providers>
</membership>
我强烈认为有一些小问题,但我想不通。
软件
- Visual Studio 2010
- .NET 4.0
- 带有 SP2 (10.50.4000) 的 Server 2008 R2
- IIS 7.5
【问题讨论】:
标签: c# asp.net sql-server asp.net-membership membership-provider