2013-07-19 31 views
1

我想在mvc 4應用程序中實現簡單的AD身份驗證。以下是我在web.config文件中改變:在mvc 4應用程序中使用AspNetSqlMembershipProvider而不是ActiveDirectoryMembershipProvider

<connectionStrings> 
    <add name="ADConnectionString" connectionString="LDAP://test.com:636/DC=test,DC=com"/> 
</connectionStrings> 
... 
<membership defaultProvider="ADMembershipProvider"> 
     <providers> 
     <clear/> 
     <add name="ADMembershipProvider" type="System.Web.Security.ActiveDirectoryMembershipProvider" connectionStringName="ADConnectionString" attributeMapUsername="sAMAccountName"/> 
     </providers> 

下面是這是使用AD認證我的服務類中的方法:

public bool Authentificate(string userName, string password) 
{ 
    var membershipSection = (MembershipSection)WebConfigurationManager.GetSection("system.web/membership"); 

    string defaultProvider = membershipSection.DefaultProvider; 

    MembershipProvider provider = Membership.Providers[defaultProvider]; 

    return provider != null && provider.ValidateUser(userName, password); 
} 

但是,當我調試我的應用我看到「defaultProvider 「是‘AspNetSqlMembershipProvider’而不是‘ActiveDirectoryMembershipProvider’和認證失敗與消息:

無法連接到SQL Server數據庫。在 System.Web.Management.SqlServices.GetSqlConnection(字符串服務器, 字符串用戶,字符串password,布爾可信,字符串 的connectionString)在 System.Web.Management.SqlServices.SetupApplicationServices(字符串 服務器,字符串用戶,字符串密碼布爾信任,字符串 的connectionString,數據庫字符串,字符串dbFileName,SqlFeatures 功能,布爾安裝)在 System.Web.DataAccess.SqlConnectionHelper.CreateMdfFile(字符串 fullFileName,DATADIR字符串,字符串的connectionString)

什麼是wron g在這裏?

+0

似乎出於某種原因,配置不是從web.config加載,而是從machine.config文件加載。你能分享一些你的解決方案的結構信息嗎?這個服務類在哪裏定義,以及如何和在哪裏調用? – Andrei

+0

@Andrei你好!我有以下解決方案結構(6個項目): ** MyProject.Data MyProject.Domain MyProject.Infrastructure MyProject.Presentation MyProject.Tests MyProject.Web ** ** web.config **位於.Web項目根目錄中。具有** Authentificate()**方法的服務類位於**。Domain **項目中。此方法在**。Presentation **項目中由控制器類調用。並且控制器正在使用來自**。Web項目的視圖。如果需要,我可以添加任何其他信息。 – user2598794

+0

應用程序的入口點在哪裏?它是否在**。Web **或**。Presentation **項目中,或者在其他地方? – Andrei

回答

0

當.Net應用程序啓動時,它會從相應的配置文件中設置域設置。對於在IIS上運行的Web應用程序,這是web.condig,對於可執行文件 - app.config,它實際上已重命名爲executable_name.exe.config。如果沒有找到這樣的文件 - machine.config正在拾取設置。重要的一點是,一個域內的所有程序集都使用相同的設置 - 那些與入口點彙編相關的設置。並沒有考慮其他設置!

在你的情況下,即使網絡項目具有web.config文件的入口點是Presentation項目,所以基本上web.config設置不以任何方式使用。最簡單的解決方法是定義app.config演示文稿項目並在其中包含所有必要的設置(如提供程序)。

+0

我添加了相同的web.config中都.Presentation和。域項目,但什麼都沒有改變(我得到相同的異常。 – user2598794

+0

@ user2598794,你接着說:web.config',或'app.config'? 'web.config'僅用於網絡項目,同時'app.config'是可執行文件(也注意到,'app.config'是構建之後改變了,所以在輸出目錄,你會碰到這樣的'myproject.presentation.exe。 。config') – Andrei

+0

我都嘗試的web.config和app.config中 - 同樣的結果 – user2598794

相關問題