2012-01-20 41 views
2

我遇到此错误:成员资格凭证验证失败。当我尝试使用基于表单的身份验证在ASP.NET应用程序中使用Active Directory用户登录时。成员资格凭证验证失败

我有一个复杂的设置,如下图所示:

我使用的是Active Directory轻型目录服务(AD LDS),又名亚当会员库。 我使用代理用户将其绑定到Active Directory并完成adamsync。 我为AD LDS配置了SSL证书。 使用LDP.exe连接到AD LDS时,我可以连接/绑定AD LDS用户或AD用户,因此代理服务器正常。 我的ASP.NET应用程序与AD LDS对话,我能够使用基于表单的身份验证成功地与AD LDS用户进行登录。

但我无法登录与我的AD用户与ASP.NET应用程序,我错过了什么?

继承人从我的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

你可以发布你的代码..。你有没有考虑过看PrincipalContext ..?你是如何传递DC = CN =等...?在网络配置或ASP.NET类 – MethodMan

+0

也请看看这里的网站点击ContextOptions链接它说选项http://msdn.microsoft.com/en-us/library/bb300969.aspx | http://msdn.microsoft.com/en-us/library/system.directoryservices.accountmanagement.contextoptions.aspx PrincipalContext可能是您更好的选择 – MethodMan

+0

我没有检查PrincipalContext,因为我使用ActiveDirectoryMembershipProvider,我假设它能够执行此类连接。 – Groumy

回答

1

基础上的博客文章:http://erlend.oftedal.no/blog/?blogid=71

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

Additionnaly,正如我发现有:http://directoryprogramming.net/forums/thread/4181.aspx

AD LDS或ADAM,不能用安全绑定中,不是通过安全连接简单绑定(使用SSL)。但是我想要绑定的Active Directory仅使用安全绑定。

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

最后,我要创造我自己的供应商作为DJ KRAZE指定多个上下文

0

老问题,但在我的情况下,这将主要背景是由配置文件中缺少attributeMapUsername="sAMAccountName"引起将要使用。