C# 使用成员资格提供程序验证广告用户
我遇到了一个奇怪的问题 简介 我的登录页面可以针对SQL用户或AD用户进行身份验证。要确定用户是否为广告用户,用户名应包含反斜杠 SQL的逻辑工作正常,但在根据AD对用户进行身份验证时,我遇到了最常见的错误(C# 使用成员资格提供程序验证广告用户,c#,asp.net,sql-server,asp.net-membership,membership-provider,C#,Asp.net,Sql Server,Asp.net Membership,Membership Provider,我遇到了一个奇怪的问题 简介 我的登录页面可以针对SQL用户或AD用户进行身份验证。要确定用户是否为广告用户,用户名应包含反斜杠 SQL的逻辑工作正常,但在根据AD对用户进行身份验证时,我遇到了最常见的错误(对象引用未设置为对象的实例。) 详细信息 对于SQL用户,我提供了CustomSqlMembershipProvider()。电话是这样的: if(Membership.Provider.ValidateUser(userName, userPassword)) userAuthen
对象引用未设置为对象的实例。
)
详细信息
对于SQL用户,我提供了CustomSqlMembershipProvider()
。电话是这样的:
if(Membership.Provider.ValidateUser(userName, userPassword))
userAuthenticated = true;
类CustomSqlMembershipProvider()
将凭据发送到SQL数据库
对于广告用户,我有以下逻辑:
if (Membership.Providers["ADMembership"].ValidateUser(userName, userPassword))
userAuthenticated = true;
如果语句生成的错误对象引用未设置为对象实例,则上述。
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>
...
我强烈认为存在一些小问题,但我无法理解
软件
- VisualStudio2010
- .NET4.0
- 带SP2的服务器2008 R2(10.50.4000)
- IIS 7.5
这不是一个直接的答案,而是一些缩小问题范围的建议:
尝试在web.config中更改defaultProvider。将其设置为ADMembership
细分通话:
到
这是胡乱猜测:)。将“ADMembership”重命名为“ADMembershipProvider”,后缀为“Provider”,以防万一会出现一些约定内容
if (Membership.Providers["ADMembership"].ValidateUser(userName, userPassword))
userAuthenticated = true;
var activeDirectoryProvider = Membership.Providers["ADMembership"];
if(activeDirectoryProvider != null)
{
userAuthenticated = true;
}
else
{
Log("activeDirectoryProvider is null");
}