asp.net中的窗体身份验证(完整篇之一:创建asp.net的窗体身份验证方式)

在《asp.net中的窗体身份验证(最简单篇) 》中介绍了使用FormsAuthentication.SetAuthCookie()方法创建身份验证票据的方法,事实上,这是一个使用缺省的身份验证票据的方法。在asp.net中,Forms身份验证的方式是在用户登录时创建一个身份验证票,然后将这个身份验证票存放在Cookie中,以后整个网站都可以通过这个Cookie来判断用户是否已经登录。如果用户浏览器不支持Cookie,asp.net也可以将票证放在URL的查询字符串中进行传递,这个不是本文的重点,也就不详细介绍了。

    那么当访问一个asp.net的网站时,asp.net究竟是怎么进行身份验证的呢?

    在asp.net中,将身份验证分成了两个部分,第一个部分是IIS的身份验证,在用户访问网站时,IIS首先就会对用户进行身份验证,这个身份验证的具体设置在IIS中,这也非本文的重点,在此也不再详细介绍了。只有IIS通过了用户的身份验证之后,才会进行第二个部分的身份验证,这个部分的身份验证则由asp.net来完成。

    asp.net的身份验证方式由web.config文件中的<authentication>节点的mode属性值设置,如果要使用Forms身份验证,mode属性值必须为Forms。

    设置完<authentication>节点的mode属性值之后,我们还可以在该节点下添加一个<forms>节点,用于说明Forms身份验证的具体选项。常用的<authentication>节点的设置方式如下所示:

  1. <authentication mode="Forms">  
  2.  <forms   
  3.    loginUrl="AdminLogin.aspx"  
  4.    timeout="30"   
  5.    name=".ASPXAUTH"   
  6.    path="/"   
  7.    requireSSL="false"   
  8.    cookieless="UseDeviceProfile"   
  9.    defaultUrl="default.aspx"   
  10.    slidingExpiration="true"   
  11.    protection="All"   
  12.    enableCrossAppRedirects="false">  
  13.  </forms>  
  14. </authentication>   

    以上代码中,loginUrl为用户登录网页,如果省略,asp.net将使用网站根目录下的login.aspx为登录页面。timeout设置登录超时时间为30分钟。name为存储身份验证票据的Cookie名,默认值为“.ASPXAUTH” 。path为存储身份验证票据的Cookie的路径,默认值为“/”。requireSSL为存储身份验证票据的Cookie是否使用SSL加密传输,默认为false。cookieless为浏览器不支持Cookie时的存储身份验证票据的传递方式,默认值为“UseDeviceProfile”,即自动检测浏览器是否支持Cookie,如果浏览器支持Cookie则使用Cookie传递身份验证票据,如果浏览器不支持Cookie则使用URL传递身份验证票据。defaultUrl为登录后默认跳转的网页,默认值为“default.aspx”。slidingExpiration为是否以执行可变的会话生存期,默认值为true。protection为Cookie的加密类型,默认值为“All”,即对Cookie同时使用数据验证和加密方法,其中数据验证算法由<machineKey>节点中设置。enableCrossAppRedirects是否将通过身份验证的用户重新定向到其它Web应用程序的URL中,默认值为false。

    在以上代码中,<forms>节点中的protection属性值为All,说明要对Cookie同时使用数据验证和加密方法,而数据验证算法由<machineKey>节点中设置,这就意味着要在<system.web>节点下添加一个<machineKey>子节点。<machineKey>节点的作用是对密钥进行设置,如以下代码所示:

  1. <machineKey validation="3DES"/>  

  <authentication>节点用于设置asp.net的身份验证方式,也就是要怎么去验证用户身份,但验证完用户身份之后,哪些用户可以访问资源,<authentication>节点就不能进行设置了,这个使用就 必须要使用到<authorization>节点,该节点可以设置应用程序的授权,只有授权的用户才能访问网站资源。

    <authorization>节点下面可以有两种子节点:<allow>和<deny>。其中<allow>节点用于说明允许对网站资源访问的规则。<deny>节点用于说明禁止对网站资源访问的规则。

    拒绝匿名用户访问的设置方式如下所示:

  1. <authorization>  
  2.     <deny users="?"/>  
  3. </authorization>>  

     经过以上几个步骤,web.config文件的修改基本上就结束了,一个完整的web.config文件如下所示:

  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <configuration>  
  3.     <appSettings/>  
  4.     <connectionStrings/>  
  5.     <system.web>  
  6.       <compilation debug="true" />  
  7.             <authentication mode="Forms">  
  8.                 <forms   
  9.                      loginUrl="AdminLogin.aspx"  
  10.                      timeout="30"   
  11.                      name=".ASPXAUTH"   
  12.                      path="/"   
  13.                      requireSSL="false"   
  14.                      cookieless="UseDeviceProfile"   
  15.                      defaultUrl="default.aspx"   
  16.                      slidingExpiration="true"   
  17.                      protection="All"   
  18.                      enableCrossAppRedirects="false">  
  19.                 </forms>  
  20.             </authentication>  
  21.             <authorization>  
  22.                 <deny users="?"/>  
  23.             </authorization>  
  24.             <machineKey validation="3DES"/>  
  25.     </system.web>  
  26. </configuration>  

    至此为止,网站窗体身份验证方式就已经创建完毕,此时,无法访问网站中的哪个网页,都会自动跳转到AdminLogin.aspx页面,下一步可以编写AdminLogin.aspx网页代码了。

    本文中涉及到的web.confing文件中的节点的详细解释可以在《asp.net中的窗体身份验证(完整篇之附录:web.config中相应节点详解)》中查阅。

原文地址:https://www.cnblogs.com/sunshch/p/2526905.html