存储在asp.net mvc框架附带的帐户系统中的用户数据在哪里?

Dre*_*rew 8 asp.net-mvc

在我的mvc"你好世界"的第一次运行中,我得到了几个按钮; 回家,关于并登录.如果我在登录时创建用户帐户,那么数据存储在哪里?它是否足够安全,可以在开发我的应用程序时保留它,或者它应该转到数据库(如果它还没有)?

谢谢你的时间.

jos*_*rry 15

ASP.Net MVC和WebForms共享许多相同的组件,包括成员资格存储,身份验证和授权.这些组件用于互联网上的数千个公共站点.

默认的ASP.Net MVC模板使用与WebForms 相同的SqlMembershipProvider来存储成员资格信息.如果你查看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>
Run Code Online (Sandbox Code Playgroud)

它引用了ApplicationServices您在配置文件顶部定义的名称连接字符串:

  <connectionStrings>
    <add name="ApplicationServices"
         connectionString="data source=.\SQLEXPRESS;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|aspnetdb.mdf;User Instance=true"
         providerName="System.Data.SqlClient" />
  </connectionStrings>
Run Code Online (Sandbox Code Playgroud)

这将使用本地安装的Microsoft Sql Server Express实例安装aspnet.mdf在应用程序App_Data目录中找到的文件.

通过将MDB文件复制到SQL Server,装入它并更新连接字符串,可以轻松地将其升级为完整的SQL Server.

认证

身份验证再次由用于WebForms 的相同FormsAuthentication类处理,它也在Web配置文件中配置:

<authentication mode="Forms">
  <forms loginUrl="~/Account/LogOn" timeout="2880" />
</authentication>
Run Code Online (Sandbox Code Playgroud)

授权

默认模板还具有SqlRoleProviderWindowsTokenRoleProvider的配置条目,可用于分别从数据库或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>
Run Code Online (Sandbox Code Playgroud)

角色默认情况下禁用,可以通过改变启用角色支持enabled的属性roleManager从元素falsetrue.

配置角色后,您可以使用ASP.Net授权元素来控制对站点资源的访问.您还可以在控制器和/或操作上使用授权属性,以实现更细粒度的访问控制.你不具备使用角色进行授权,用户名,工作得很好,但这样做会使授权的管理变得更加容易.

安全

所有这些模块都是使用业界公认的安全最佳实践编写的.身份验证由IIS处理,IIS可以使用Digest或Windows Integrated身份验证,两种安全方法; 由于浏览器支持,您自己编写的任何内容也仅限于这些方法.

密码存储在数据库中,使用盐进行暴力攻击,使用诸如彩虹表之类的方法更加困难.提供商还支持密码复杂性和开箱即用的到期.

身份验证令牌使用计算机专用密钥进行安全加密,并使用MAC签名以确保它们未被篡改,然后才将它们存储在客户端cookie中.

可测性

尽管安全性非常标准,但MVC支持者强调的一个重点是这些组件并不简单,正在进行测试.然而,这个问题可以通过一些策略性放置的接口,几个外观类和一些依赖注入(现在默认支持MVC3)来解决.


goe*_*ing 4

是的,它存储在数据库中。数据库位于App_Code名称为的文件夹中ASPNETDB.MDF中。您可以在您的文件中配置它web.config

安全吗?嗯,恕我直言,确实如此。但我真的不喜欢这种方法,我更喜欢设计自己的身份验证服务并完全控制它。如果您打算坚持使用此方法,您应该阅读有关ASP.NET Membership Provider with Forms Authentication的更多信息。