【问题标题】:ldap authentication using ActiveDirectyoryMembershipProvider on GC port fails in MVC2 application在 GC 端口上使用 ActiveDirectyoryMembershipProvider 的 ldap 身份验证在 MVC2 应用程序中失败
【发布时间】:2013-03-08 07:48:11
【问题描述】:

我正在使用 C# ASP.NET 开发 MVC2 应用程序。

在我的应用程序中,我使用 ActiveDirectoryMembershipProvider 进行用户身份验证。下面是我的 web.config 文件中的 sn-p。

如果我在连接字符串中使用全局编录端口 3268,我会收到错误“GC 端口上的 LDAP 连接不支持 Active Directory”。我对此错误消息进行了谷歌搜索,但无法找到合适的解决方案。许多人建议使用端口 389,有些人建议更改代码。但我希望能够使用 GC 端口让用户连接到不同的森林,因为它更干净。

一些观察:

  • 相同的连接字符串(使用端口 3268)在我公司 i 的其他应用程序中运行良好。
  • 当我将连接字符串更改为指向端口 389 时,它可以完美运行,即属于本地域的人能够登录。但是来自另一个域的人不能。
  • 我在AcconuntModel 和AccountController 中设置了断点。连接字符串指向端口 3268,Membership.Provider 抛出“ConfigurationErrorsException”。

如果有人能帮我解决这个问题,那将非常有帮助。

web.config:

 <add name="ADConnectionString" connectionString="LDAP://myADServer.abc.ad:389/DC=abc,DC=ad" /> 

<membership defaultProvider="MyADMembershipProvider">
      <providers>
        <clear />
        <add connectionStringName="ADConnectionString" maxInvalidPasswordAttempts="1000" connectionUsername="ldapuser@abc.ad" connectionPassword="password" connectionProtection="None" enableSearchMethods="True" name="MyADMembershipProvider" type="System.Web.Security.ActiveDirectoryMembershipProvider,System.Web, Version=2.0.0.0,Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
        <add name="MySqlMembershipProvider" type="MySql.Web.Security.MySQLMembershipProvider,MySql.Web,Version=6.5.4.0,Culture=neutral,PublicKeyToken=c5687fc88969c44d" connectionStringName="MySqlMembershipConnection" enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="false" requiresUniqueEmail="true" passwordFormat="Hashed" maxInvalidPasswordAttempts="5" minRequiredPasswordLength="6" minRequiredNonalphanumericCharacters="0" passwordAttemptWindow="10" applicationName="/" autogenerateschema="true" />
      </providers>
    </membership>

    <!-- Added for custom provider -->
    <roleManager enabled="true" cacheRolesInCookie="true" defaultProvider="DDMS_Custom_RoleProvider">
      <providers>
        <clear />
        <add applicationName="/" connectionStringName="ddms_dataEntities2" name="DDMS_Custom_RoleProvider" type="DDMS_sourcecode.Utilities.DDMS_Custom_RoleProvider, DDMS_sourcecode" />
        <add connectionStringName="ApplicationServices" applicationName="/" autogenerateschema="true" name="MySqlRoleProvider" type="MySql.Web.Security.MySQLRoleProvider,MySql.Web,Version=6.5.4.0,Culture=neutral,PublicKeyToken=c5687fc88969c44d" />
      </providers>
    </roleManager>

【问题讨论】:

  • 嗨特里..我无法识别您的编辑...您能告诉我您建议的更改吗?
  • 此问题仍未解决。有人可以帮我吗?
  • 有人可以帮帮我吗?
  • 我仍然无法找到解决方案。任何帮助表示赞赏!

标签: asp.net-mvc-2 active-directory activedirectorymembership


【解决方案1】:

如果你需要搜索的是全局目录,你为什么不这样尝试

using (DirectoryEntry searchRoot = new DirectoryEntry("GC://DC=yourdomain,DC=com"))
using (DirectorySearcher ds = new DirectorySearcher(searchRoot))
{
    ds.Filter = "(sAMAccountName=userID1)";
    ds.SearchScope = SearchScope.Subtree;
    using (SearchResultCollection src = ds.FindAll())
    {
        foreach (SearchResult sr in src)
        {
            uxFred.Content = sr.Path;
        }
    }
}

【讨论】:

  • 感谢您的回复 Travis。我正在使用 ActiveDirectory Membership 提供程序来促进 AD 身份验证。我不想只是搜索,而是想使用会员提供的 validate_user 方法启用身份验证。相同的连接字符串适用于我公司的许多应用程序。出于某种原因,当我使用端口 3268 时,我收到了我在问题中指出的错误。我的其他观察结果是 Membership.Providers 具有相同的提供者列表,而与我在 web.config 中所做的更改无关。我在某处读到会员资格是一个静态类启动一次
  • 好吧,你不能使用 GC 进行身份验证。 GC 用于使用 ldap 协议查询林/域中的对象,它不涉及任何类型的身份验证。 Kerberos 是用于身份验证的协议。 3268端口是全局编录服务器中LDAP的指定端口,用户也可以通过3268端口对全局编录数据库进行有限浏览。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-30
  • 2019-06-22
  • 2020-02-01
  • 2016-08-20
  • 2020-04-14
相关资源
最近更新 更多