连接到OD时连接到OD的继承ASP.NET代码不起作用

时间:2012-05-24 20:22:57

标签: asp.net active-directory ldap

我继承了一个连接到我们的Open Directory以提供Web身份验证的软件。当连接到OD时,它就像一个魅力,但我们希望转换为使用Active Directory作为我们的主要身份验证提供程序。

显然,两者之间的LDAP方案存在差异,我花了最近6个小时的谷歌搜索和阅读,但我仍然有点过头了。当您尝试登录web interface时,这是显示的错误(这是Web界面的样子http://cl.ly/Grgo);

异常详细信息:

  

System.DirectoryServices.DirectoryServicesCOMException:一个操作   发生错误。
  [DirectoryServicesCOMException(0x80072020):发生操作错误。]
  c:\ Program中的LBOX.Membership.LDAPMembershipProvider.ValidateUser(字符串用户名,字符串密码)   文件\ CruiseControl.NET \服务器\ users.lbox.com \ WorkingDirectory \ LDAPMembershipProvider \ LDAPMembershipProvider.cs:59
  c:\ Program中的LBUserService.Login.loginButton_Click(Object sender,EventArgs e)   文件\ CruiseControl.NET \服务器\ users.lbox.com \ WorkingDirectory \ LBUserService \ Login.aspx.cs:21
  System.Web.UI.WebControls.Button.OnClick(EventArgs e)+115
  System.Web.UI.WebControls.Button.RaisePostBackEvent(String eventArgument)+140
  System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl,String eventArgument)+29
  System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint,Boolean includeStagesAfterAsyncPoint)+2981

这显然与LDAPMembershipProvider.cs的第59行和我的web.config文件有关。

CruiseControl.net的web.config文件

<membership defaultProvider="LDAP">
  <providers>
    <add name="LDAP" 
         type="LBOX.Membership.LDAPMembershipProvider" 
         LDAPRoot="LDAP://10.0.1.19:389/cn=administrator,cn=users,dc=office,dc=lbox,dc=com" />
  </providers>
</membership>

来自LDAPMembershipProvider.cs

的第59行
// Attempt to log into the LDAP server as this user
DirectoryEntry root2 = new DirectoryEntry(LDAPRoot, distinctName, password, AuthenticationTypes.ServerBind);
DirectorySearcher searcher2 = new DirectorySearcher(root2);
searcher2.SearchScope = SearchScope.Subtree;
searcher2.Filter = String.Format("cn={0}", username);

我几乎是肯定的,它与我如何使用LDAP://连接到AD有关我尝试了但是我无法连接。即使它只是猜测,任何帮助将不胜感激。想法是允许AD在不受约束的情况下验证用户名和密码。

1 个答案:

答案 0 :(得分:1)

LDAPRoot中的web.config路径对我来说有点可疑 - 它似乎表示实际的用户

LDAPRoot="LDAP://10.0.1.19:389/cn=administrator,cn=users,dc=office,dc=lbox,dc=com"
                               ****************
                               User "administrator" 

但不应该是某种容器吗?在对用户进行身份验证时,我认为LDAP成员资格提供程序必须查找用户敲击LDAP容器内的数字门,以查看他/她是否有效。

您正在基于该LDAP根创建目录搜索器 - 并且在用户中搜索通常不会返回任何结果....

我会尝试使用

LDAPRoot="LDAP://10.0.1.19:389/cn=users,dc=office,dc=lbox,dc=com"

这只会在cn=users容器内搜索,并希望有更多机会获得结果,我希望!