Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/31.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用成员资格提供程序验证广告用户_C#_Asp.net_Sql Server_Asp.net Membership_Membership Provider - Fatal编程技术网

C# 使用成员资格提供程序验证广告用户

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用户或AD用户进行身份验证。要确定用户是否为广告用户,用户名应包含反斜杠

SQL的逻辑工作正常,但在根据AD对用户进行身份验证时,我遇到了最常见的错误(
对象引用未设置为对象的实例。

详细信息

对于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");
    }