0

我正在開發使用C#ASP.NET的MVC2應用程序。在GC端口上使用ActiveDirectyoryMembershipProvider的ldap身份驗證在MVC2應用程序中失敗

在我的應用程序中,我使用ActiveDirectoryMembershipProvider進行用戶身份驗證。以下是我的web.config文件中的代碼片段。

如果我在連接字符串中使用全局編錄端口3268,則會出現錯誤「GC端口上的LDAP連接不支持Active Directory」。我沒有在這個錯誤信息穀歌,並無法找到合適的解決方案。許多人建議使用端口389,有些人建議更改代碼。但我希望能夠使用GC端口讓用戶連接到不同的森林,因爲它更加乾淨。

一些觀察:

  • 相同的連接字符串(使用3268端口)可以在我的公司,我的其他應用程序可以正常使用。
  • 當我將連接字符串更改爲指向端口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="[email protected]" 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> 
+0

特里嗨全局編錄..我不能夠識別您的編輯...你能讓我知道你有什麼變化嗎? – user1819118 2013-02-15 21:54:15

+0

此問題仍然存在。有人可以幫幫我嗎? – user1819118 2013-02-19 00:50:00

+0

有人可以幫我嗎? – user1819118 2013-02-22 23:43:22

回答

0

如果你需要搜索,你爲什麼不嘗試一下這種方式

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; 
     } 
    } 
} 
+0

Thx爲您的回覆Travis。我正在使用ActiveDirectory成員資格提供程序來促進AD身份驗證。我不想僅僅搜索,但希望使用成員資格提供的validate_user方法啓用身份驗證。相同的連接字符串適用於我公司的許多應用程序。出於某種原因,當我使用端口3268時,我收到了我在我的問題中指出的錯誤。我有其他意見是Membership.Providers具有相同的提供程序列表,無論我在web.config中所做的更改如何。我在某處讀到會員是一個靜態類,只發起一次 – user1819118 2013-03-08 00:06:18

+0

嗯,事情是,你無法使用GC進行身份驗證。 GC用於使用ldap協議查詢林/域中的對象,它不涉及任何類型的身份驗證。 Kerberos是用於身份驗證的協議。端口3268是全局編錄服務器中用於LDAP的指定端口。用戶還可以通過端口3268對全局編錄數據庫進行有限的瀏覽。 – 2013-03-08 00:13:20

相關問題