我正在开发一个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, 
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。
有人可以就此提出建议吗?
由于
答案 0 :(得分:2)
在提供正确的凭据时,ValidateUser方法可能会返回false 以下情况:
1.由于登录失败太多,目录服务器锁定了用户帐户 尝试。在目录的锁定持续时间过去之前,用户将无法登录。
2.如果EnablePasswordReset属性为true,则用户帐户将在用户提供时被锁定 一个错误的密码回答太多次了。用户的帐户将在指定的时间后解锁 PasswordAnswerAttemptLockoutDuration属性已通过。
3.用户必须存在于连接字符串中指定的容器中。有效凭据是 为位于不同容器或不同域中的用户帐户提供。用户 必须存在于连接字符串中指定的容器中。
您可能需要输入用户名DOMAIN\username
(参见第3项)?