用户数据存储在随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中,所以如何浏览表? (至少这是我下一个合乎逻辑的问题)
本质:
- 运行SQL Server Management Studio中(菜单快捷键“微软SQL 服务器下####“)
- 将对象浏览器连接到您的SQLEXPRESS服务器
- 右键单击数据库并选择A ttach ...
- 浏览您的中密度文件
这是什么与-1?我是第一个发布web.config引用的人,这和其他人给出的答案是一样的。 – 2011-02-22 18:08:23