针对Active Directory的LDAP服务器的表单身份验证将始终返回无效的用户名/密码

时间:2014-12-17 12:15:20

标签: asp.net asp.net-mvc authentication ldap membership-provider

我正在开发一个asp.net mvc-5 Web应用程序。我使用asp.net成员资格提供程序使用表单身份验证对我们的ldap服务器验证用户。

以下是登录操作方法: -

[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public ActionResult Login(LoginModel model, string returnUrl)
{


    MembershipProvider domainProvider;

    domainProvider = Membership.Providers["TestDomain1ADMembershipProvider"];
    if (ModelState.IsValid)
    {

        // Validate the user with the membership system.
        if (domainProvider.ValidateUser(model.UserName, model.Password))
        {


            FormsAuthentication.SetAuthCookie(model.UserName, model.RememberMe);

        }
        else
        {
            //  Response.Write("Invalid UserID and Password");
            ModelState.AddModelError("", "The user name or password provided is incorrect.");
            return View(model);
        }

        return RedirectToLocal(returnUrl);

    }

    return View(model);
}

我在web.config文件中为ldap定义了<providers><connection string>: -

<providers>
<add name="TestDomain1ADMembershipProvider" type="System.Web.Security.ActiveDirectoryMembershipProvider, System.Web, Version=4.0.0.0, &#xA;Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" connectionStringName="DomainConnectionString"  connectionUsername="*****\administrator" connectionPassword="*****" attributeMapUsername="sAMAccountName"/>
</providers>

&安培;

<connectionStrings>
    <add name="DomainConnectionString" connectionString="LDAP://WIN-SPDev.tgroup.local/OU=Domain Controllers,DC=tgroup,DC=local"/>
       </connectionStrings>

但是现在当用户输入他的用户名/密码时,domainProvider.ValidateUser(model.UserName, model.Password)总是返回false。

有人可以就此提出建议吗?

由于

1 个答案:

答案 0 :(得分:2)

  

在提供正确的凭据时,ValidateUser方法可能会返回false   以下情况:

     

1.由于登录失败太多,目录服务器锁定了用户帐户   尝试。在目录的锁定持续时间过去之前,用户将无法登录。

     

2.如果EnablePasswordReset属性为true,则用户帐户将在用户提供时被锁定   一个错误的密码回答太多次了。用户的帐户将在指定的时间后解锁   PasswordAnswerAttemptLockoutDuration属性已通过。

     

3.用户必须存在于连接字符串中指定的容器中。有效凭据是   为位于不同容器或不同域中的用户帐户提供。用户   必须存在于连接字符串中指定的容器中。

您可能需要输入用户名DOMAIN\username(参见第3项)?