【问题标题】:Authenticating an AD user using Membership Provider使用 Membership Provider 对 AD 用户进行身份验证
【发布时间】: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


    【解决方案1】:

    这不是直接的答案,但很少有缩小问题范围的建议:

    1. 尝试更改 web.config 中的 defaultProvider。将其设置为 ADMembership。

    2. 中断通话:


    if (Membership.Providers["ADMembership"].ValidateUser(userName, userPassword))
        userAuthenticated = true;
    


    var activeDirectoryProvider = Membership.Providers["ADMembership"];
    
    if(activeDirectoryProvider  != null)
    {
        userAuthenticated = true;
    }
    else
    {
        Log("activeDirectoryProvider is null");
    }
    
    1. 这是疯狂的猜测:)。将“ADMembership”重命名为“ADMembershipProvider”,后缀为“Provider”,以防出现一些约定问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-22
      • 1970-01-01
      • 2020-09-17
      • 2014-08-09
      相关资源
      最近更新 更多