asp.net mvc3+EF4.1项目实战

ASP.NET身份验证机制membership入门——配置篇(1)

  http://www.cnblogs.com/xlb2000/archive/2010/05/10/1729076.htmlhtml

 

1.添加数据库支持

    要使用membership首先须要数据库的支持,因此咱们第一步就是建立用来存放用户、角色等信息的表结构。别担忧,MS早就把建立表的语句写好了,而且还提供了用户界面,让咱们点点鼠标就能够建立好所需的结构了。web


    具体操做以下:进入C:\WINDOWS\Microsoft.NET\Framework\v2.0.xxxxx(vs2010 的目录是v4.0.xxxx)这个目录下,找到aspnet_regsql.exe直接双击运行,就会弹出一个界面,直接下一步。第二个界面让咱们选择是 添加表结构仍是移除,咱们固然选择添加,继续下一步。在这个界面中须要填写服务器ip地址以及身份验证信息。在填写完毕后,就能够选择你要将表结构添加到 哪一个数据库中了。须要注意的是:若是选择默认,则会建立一个新的名叫aspnetdb的数据库,而后将表结构加入其中。一路下一步就完成了数据库结构的添 加。算法

2.web.config配置


    好了,表结构添加完毕,接下来就是须要在项目中进行一些简单的配置了。咱们在vs中新建一个网站,随后再用记事本打开 C:\WINDOWS\Microsoft.NET\Framework\v2.0.xxxxx\CONFIG\machine.config这个文件, 找到system.web节点下的membership节点,将整个节点复制到咱们新建网站的web.config中的system.web节点中。sql

 

<membership>
      <providers>
        <add name="AspNetSqlMembershipProvider"
            type="System.Web.Security.SqlMembershipProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
            connectionStringName="LocalSqlServer"
            enablePasswordRetrieval="false" 
            enablePasswordReset="true" 
            requiresQuestionAndAnswer="true" 
            applicationName="/" 
            requiresUniqueEmail="false" 
            passwordFormat="Hashed" 
            maxInvalidPasswordAttempts="5" 
            minRequiredPasswordLength="7" 
            minRequiredNonalphanumericCharacters="1" 
            passwordAttemptWindow="10" 
            passwordStrengthRegularExpression=""/>
      </providers>
    </membership>

下面是主要的几个属性的含义:数据库

      name:数据提供程序的名称,因为咱们是从machine.config复制过来的,因此必须更名,防止重名windows

      type:数据提供程序类型,若是使用的是MSSQL数据库,则保持不变便可,若是使用的是Oracle等其余数据库,则必须本身建立一个类来继承MembershipProvider抽象基类,重写里边的全部抽象方法,而后把类型写在这里便可。浏览器

      connectionStringName:该属性必须指定在<connectionStrings>节点中,一个链接字符串的名字。安全

      applicationName:应用程序名 称,membership容许多个应用程序共同使用一个数据库来管理本身的用户、角色信息,各应用程序只需配置不一样的applicationName即 可,固然,若是想要多个应用程序使用同一份用户角色信息,只需设置同样的applicationName便可。服务器

      requiresUniqueEmail:顾名思义,用户注册时,是否须要提供未注册过的邮箱。cookie

      passwordFormat:密码存储格式,密码保存在数据库中的格式,最经常使用的有Clear(不加密)和Hashed(使用SHA1算法加密)
      minRequiredPasswordLength:最小密码长度。

      minRequiredNonalphanumericCharacters:指定有效密码中必须包含的特殊字符的最小数量,就是说不是字母也不是数字的字符的数量,好比+-*/,.什么的,增长密码强度

      

      好了,咱们将配置修改一下并添加链接字符串:

<connectionStrings>
    <add name="ConnectionString" connectionString="server=.;uid=sa;pwd=sa;database=aspnetdb"/>
</connectionStrings>

<system.web>
    <membership defaultProvider="mySqlMembershipProvider">
      <providers>
        <add name="mySqlMembershipProvider"
            type="System.Web.Security.SqlMembershipProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
            connectionStringName="ConnectionString"
            enablePasswordRetrieval="false" 
            enablePasswordReset="true" 
            requiresQuestionAndAnswer="true" 
            applicationName="TestMembership" 
            requiresUniqueEmail="true" 
            passwordFormat="Hashed" 
            maxInvalidPasswordAttempts="5" 
            minRequiredPasswordLength="6" 
            minRequiredNonalphanumericCharacters="0" 
            passwordAttemptWindow="10" 
            passwordStrengthRegularExpression=""/>
      </providers>
    </membership>
</system.web>

上面用黄色高亮字体标注出来的属性,是为了告诉membership采用咱们刚才添加的mySqlMembershipProvider这个配置,由于machine.config中有一个AspNetSqlMembershipProvider,咱们又在web.config中又添加了一个mySqlMembershipProvider,如今有了两个配置,因此应该使用defaultProvider属性指明本网站使用哪一个配置。随后又指定了链接字符串配置的名称,一个Email不容许重复注册,最小密码长度为6,不限制密码中必须含有标点符号等配置。

 3.ASP.NET身份验证配置

    membership算是配置到这里了,可是尚未结束,咱们还须要把ASP.NET的身份验证机制配置为Forms身份验证。

 补充内容:

  ASP.NET一共有三种身份验证方式,分别为:

 

    1. Forms验证
    2. Windows验证
    3. Passport验证

 

    Windows验证是一种把可以访问到IIS的用户认为是已经经过身份验证的用户。能够经过windows自带的身份验证策略来控制哪些页面用户能够访问,哪些不能访问。这是一种最简单的方式,基本不用写多少代码,所有经过配置就能够实现访问的控制。

 

    Passport验证是由微软提供身份验证服务。固然这是收费的。

 

    Forms验证就是在用户登陆时,向浏览器中添加一个cookie,而后在用户每次访问时都检测这个cookie,从而达到身份验证的目的。

 

 

 

    配置Forms身份验证其实就是把下面代码复制到web.config中去就能够了:

 

<system.web>
  <authentication mode="Forms">
    <forms loginUrl="Login.aspx"
           protection="All"
           timeout="30"
           name=".ASPXAUTH" 
           path="/"
           slidingExpiration="true"
           defaultUrl="default.aspx"
           cookieless="UseDeviceProfile"/>
  </authentication>
</system.web>

 

  • loginUrl 指向应用程序的自定义登陆页。应该将登陆页放在须要安全套接字层 (SSL) 的文件夹中。这有助于确保凭据从浏览器传到 Web 服务器时的完整性。

  • protection 设置为 All以指定窗体身份验证票的保密性和完整性。这致使使用 machineKey 元素上指定的算法对身份验证票证进行加密,而且使用一样是 machineKey 元素上指定的哈希算法进行签名。

  • timeout 用于指定窗体身份验证会话的有限生存期。默认值为 30 分钟。若是颁发持久的窗体身份验证 Cookie,timeout 属性还用于设置持久 Cookie 的生存期。

  • name path 设置为应用程序的配置文件中定义的值。

  • requireSSL 设置为 false。该配置意味着身份验证 Cookie 可经过未经 SSL 加密的信道进行传输。若是担忧会话窃取,应考虑将 requireSSL 设置为 true

  • slidingExpiration 设置为 true 以执行变化的会话生存期。这意味着只要用户在站点上处于活动状态,会话超时就会按期重置。

  • defaultUrl 设置为应用程序的 Default.aspx 页。

  • cookieless 设置为 UseDeviceProfile,以指定应用程序对全部支持 Cookie 的浏览器都使用 Cookie。若是不支持 Cookie 的浏览器访问该站点,窗体身份验证在 URL 上打包身份验证票。

  • enableCrossAppRedirects 设置为 false,以指明窗体身份验证不支持自动处理在应用程序之间传递的查询字符串上的票证以及做为某个窗体 POST 的一部分传递的票证。

    须要说明一下的是LoginUrlDefaultUrl属性:LoginUrl指向登陆页面,当ASP.NET判断出该用户请求的资源不容许匿名访问,而该用户未登陆时,ASP.NET会自动跳转到LoginUrl所指向的页面,当登陆成功后,则跳转回原来请求的页面。DefaultUrl指向默认页面。当咱们直接访问登陆页面,并登陆成功后,这时ASP.NET会跳转到DefaultUrl指向的页面。其余的选项不写均可以,由于有默认值。

相关文章
相关标签/搜索