我遇到此错误:会员凭据验证失败。当我尝试使用基于表单的身份验证在ASP.NET应用程序中使用Active Directory用户登录时。
我有一个复杂的设置如下:
我正在使用Active Directory轻量级目录服务(Ad LDS),即ADAM作为成员资格存储库。 我将其绑定到具有代理用户的Active Directory并完成了adamsync。 我为AD LDS配置了SSL证书。 使用LDP.exe连接到AD LDS时,我能够与AD LDS用户或AD用户连接/绑定,因此代理是可以的。 我的ASP.NET应用程序与AD LDS交谈,我能够使用基于表单的身份验证成功登录AD LDS用户。
但是我无法使用ASP.NET应用程序登录我的AD用户,我错过了什么?
来自我的web.config:
的我的提供者部分<add name="MyADConnectionString"
connectionString="LDAP://localhost/OU=Users,DC=PreuveConcept,DC=local" />
<authentication mode="Forms">
<forms loginUrl="~/Account/LogOn" timeout="2880" />
</authentication>
<membership defaultProvider="AspNetActiveDirectoryMembershipProvider">
<providers>
<clear/>
<add name="AspNetActiveDirectoryMembershipProvider"
type="System.Web.Security.ActiveDirectoryMembershipProvider"
connectionStringName="MyADConnectionString"
connectionProtection="Secure"
enableSearchMethods="true"/>
</providers>
</membership>
继承我的登录操作(默认MVC AcountControler):
[HttpPost]
public ActionResult LogOn(LogOnModel model, string returnUrl)
{
if (ModelState.IsValid)
{
if (Membership.ValidateUser(model.UserName, model.Password))
{
FormsAuthentication.SetAuthCookie(model.UserName, model.RememberMe);
if (Url.IsLocalUrl(returnUrl) && returnUrl.Length > 1 && returnUrl.StartsWith("/")
&& !returnUrl.StartsWith("//") && !returnUrl.StartsWith("/\\"))
{
return Redirect(returnUrl);
}
else
{
return RedirectToAction("Index", "Home");
}
}
else
{
ModelState.AddModelError("", "The user name or password provided is incorrect.");
}
}
// If we got this far, something failed, redisplay form
return View(model);
}
答案 0 :(得分:1)
基于该博文:http://erlend.oftedal.no/blog/?blogid=71
我看来我的问题的根源是我使用ActiveDirectoryMembershipProvider,它专门排除了代理用户。
另外,正如我在那里发现的那样:http://directoryprogramming.net/forums/thread/4181.aspx
AD LDS或ADAM,不能使用安全绑定,这不是通过安全连接进行简单绑定(使用SSL)。但是我要绑定的Active Directory只使用Secure Bind。
因此,如果我使用基于Windows的身份验证,我的AD用户可以进行身份验证,但不能使用ADAM,如果我使用基于表单的ADAM,则可以进行身份验证,但不能通过身份验证。
总之,我必须创建我自己的Provider,它将用作DJ KRAZE指定具有多个Context的Principal Context
答案 1 :(得分:0)
旧问题,但在我的情况下,这是由配置文件中缺少attributeMapUsername="sAMAccountName"
引起的。