会员凭证验证失败
Posted
技术标签:
【中文标题】会员凭证验证失败【英文标题】:Membership credential verification failed 【发布时间】:2012-01-20 15:04:10 【问题描述】:我遇到了这个错误:。当我尝试使用基于表单的身份验证在 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 中的 Provider 部分:
<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);
【问题讨论】:
你能贴出你的代码吗...你也考虑过看看 PrincipalContext ..?你是如何通过 DC= CN= 等...?在 web Config 或 ASP.NET 类中 还可以看看这个网站,点击那里的 ContextOptions 链接,上面写着 Options msdn.microsoft.com/en-us/library/bb300969.aspx | msdn.microsoft.com/en-us/library/… PrincipalContext 可能是你更好的选择 我没有检查 PrincipalContext,因为我使用的是 ActiveDirectoryMembershipProvider,我想它能够执行这样的连接。 这是一种奇怪的方法来检查用户凭据与 AD 您在配置文件中公开用户名/密码,如果您使用 PrincipalContext 它应该根据用户是否有效来验证 AD AD 中该组的成员.. 将此作为参考以及类似问题/帖子***.com/questions/4712927/… 我从 My Web.Config 中删除了 connectionUsername 和 connectionPassword ,它是相同的。他们在那里只是因为我遵循的教程指定了他们 【参考方案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 可以通过身份验证,但不是 AD。
总之,我必须创建自己的 Provider,作为 DJ KRAZE 指定的具有多个 Context 的 Principal Context
【讨论】:
【参考方案2】:老问题,但在我的情况下,这是由于配置文件中缺少 attributeMapUsername="sAMAccountName"
造成的。
【讨论】:
以上是关于会员凭证验证失败的主要内容,如果未能解决你的问题,请参考以下文章