在我的mvc「hello world」的第一次運行中,我得到了幾個按鈕;家,關於和登錄。如果我在登錄時創建用戶帳戶,那麼數據存儲在哪裏?是否足夠安全,以便在開發我的應用程序的時候保持原樣,還是應該將其發送到數據庫(如果還沒有的話)?用戶數據存儲在隨asp.net mvc框架附帶的帳戶系統中的位置在哪裏?
謝謝你的時間。
在我的mvc「hello world」的第一次運行中,我得到了幾個按鈕;家,關於和登錄。如果我在登錄時創建用戶帳戶,那麼數據存儲在哪裏?是否足夠安全,以便在開發我的應用程序的時候保持原樣,還是應該將其發送到數據庫(如果還沒有的話)?用戶數據存儲在隨asp.net mvc框架附帶的帳戶系統中的位置在哪裏?
謝謝你的時間。
是的,它存儲在數據庫中。數據庫位於名稱爲ASPNETDB.MDF
的App_Code
文件夾中。您可以在您的web.config
文件中對其進行配置。
安全嗎?那麼,恕我直言,這是。但我真的不喜歡這種方法,我更喜歡設計自己的身份驗證服務並完全控制它。如果你要堅持這種方法,你應該閱讀更多關於ASP.NET Membership Provider with Forms Authentication。
如果您創建一個默認的ASP.NET MVC 3應用程序,並期待INT的web.config中,你會看到:
<add name="ApplicationServices"
connectionString="data source=.\SQLEXPRESS;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|aspnetdb.mdf;User Instance=true"
providerName="System.Data.SqlClient" />
而且
<membership>
<providers>
<clear/>
<add name="AspNetSqlMembershipProvider" type="System.Web.Security.SqlMembershipProvider" connectionStringName="ApplicationServices"
enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="false" requiresUniqueEmail="false"
maxInvalidPasswordAttempts="5" minRequiredPasswordLength="6" minRequiredNonalphanumericCharacters="0" passwordAttemptWindow="10"
applicationName="/" />
</providers>
</membership>
這似乎嘗試連接到本地SQL Server Express實例並從應用程序數據文件夾加載aspnetdb.mdf
。 membership.providers
鍵然後引用System.Web.Security.SqlMembershipProvider
,並引用ApplicationServices
連接。
ASP.Net MVC和WebForms共享許多相同的組件,包括成員資格存儲,認證,授權。這些組件在互聯網上的數千個公共站點上使用。
會員
默認ASP.Net MVC模板使用相同SqlMembershipProvider作爲WebForms的存儲會員信息。如果您查看web.config
文件,您會看到<membership/>
元素下的配置部分,它看起來像這樣;
<membership>
<providers>
<clear/>
<add name="AspNetSqlMembershipProvider" type="System.Web.Security.SqlMembershipProvider" connectionStringName="ApplicationServices"
enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="false" requiresUniqueEmail="false"
maxInvalidPasswordAttempts="5" minRequiredPasswordLength="6" minRequiredNonalphanumericCharacters="0" passwordAttemptWindow="10"
applicationName="/" />
</providers>
</membership>
它引用名爲ApplicationServices
連接字符串,你會在配置文件的頂部找到定義:
<connectionStrings>
<add name="ApplicationServices"
connectionString="data source=.\SQLEXPRESS;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|aspnetdb.mdf;User Instance=true"
providerName="System.Data.SqlClient" />
</connectionStrings>
此安裝使用本地安裝的應用程序的App_Data
目錄中找到的aspnet.mdf
文件Microsoft Sql Server Express實例。
通過將MDB文件複製到SQL Server,裝載它並更新連接字符串,您可以輕鬆地將其升級爲完整的SQL Server。
認證
認證再次被用於WebForms的相同FormsAuthentication類處理,它也是一個在網絡配置文件配置:
<authentication mode="Forms">
<forms loginUrl="~/Account/LogOn" timeout="2880" />
</authentication>
授權
默認模板還具有用於SqlRoleProvider和WindowsTokenRoleProvider的配置條目h可以分別用於從數據庫或ActiveDirectory中爲用戶存儲和檢索角色。角色管理器在<roleManager/>
元素中配置。
<roleManager enabled="false">
<providers>
<clear/>
<add name="AspNetSqlRoleProvider" type="System.Web.Security.SqlRoleProvider" connectionStringName="ApplicationServices" applicationName="/" />
<add name="AspNetWindowsTokenRoleProvider" type="System.Web.Security.WindowsTokenRoleProvider" applicationName="/" />
</providers>
</roleManager>
角色默認情況下禁用,可以通過改變從false
的roleManager
元素的enabled
屬性true
啓用角色的支持。
配置角色後,您可以使用ASP.Net authorization元素來控制對您網站資源的訪問。您也可以在您的控制器上使用Authorize attributes和/或採取更細緻的訪問控制措施。你不要有使用角色進行授權,用戶名工作得很好,但這樣做會使授權管理變得更容易。
安全
所有這些模塊採用業界都寫的公認安全的最佳做法。身份驗證由IIS處理,可以使用Digest或Windows集成身份驗證兩種安全方法;由於瀏覽器的支持,你自己寫的任何東西都會被限制在這些方法中。
將密碼存儲在數據庫中的散列數據庫中,使用彩虹表等方法制作暴力攻擊更加困難。提供商還支持密碼複雜性和開箱即用期限。
身份驗證令牌使用機器特定的密鑰安全加密,並使用MAC進行簽名以確保它們未被篡改,然後纔將其存儲在客戶端cookie中。
可測
即使安全性是相當標準,一個是強調MVC支持者鼓勵這些部件不作簡單的,就是測試。然而,這個問題可以通過一些戰略性的接口,一些Facade類以及一些依賴注入(現在在MVC3中默認支持)來簡單地解決。
數據庫是由asp.net通過代碼創建的。此功能使用asp.net構建成員身份功能。你先看看它:http://msdn.microsoft.com/en-us/library/yh26yfzy.aspx
並且還要看模型文件夾,你會在那裏看到帳號模型。並查看控制器文件夾。在那裏,你將帳戶控制器。檢查代碼,你會發現它。
我正在回答下一個邏輯步驟:好的,所以我知道它在ASPNETDB.MDF中,所以如何瀏覽表? (至少這是我下一個合乎邏輯的問題)
本質:
這是什麼與-1?我是第一個發佈web.config引用的人,這和其他人給出的答案是一樣的。 – 2011-02-22 18:08:23