2

我遇到了这个错误:会员凭证验证失败。当我尝试使用基于表单的身份验证在 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);
    }
4

2 回答 2

1

基于该博客文章:http ://erlend.oftedal.no/blog/?blogid=71

我似乎问题的根源是我使用了 ActiveDirectoryMembershipProvider 并且它专门排除了代理用户。

另外,正如我在那里发现的那样:http: //directoryprogramming.net/forums/thread/4181.aspx

AD LDS 或 ADAM,不能使用安全绑定,它们不是通过安全连接(使用 SSL)进行的简单绑定。但是我想绑定的 Active Directory 只使用安全绑定。

因此,如果我在基于 Windows 的身份验证中,我的 AD 用户可以通过身份验证,但不是 ADAM,如果我使用基于表单的 ADAM 可以通过身份验证,但不是 AD。

总之,我必须创建自己的提供程序,它将用作 DJ KRAZE 指定具有多个上下文的主体上下文

于 2012-01-23T13:11:11.840 回答
0

老问题,但在我的情况下,这是由于缺少attributeMapUsername="sAMAccountName"配置文件造成的。

于 2015-01-08T08:39:24.127 回答