zoukankan      html  css  js  c++  java
  • 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中相应节点详解)》中查阅。

  • 相关阅读:
    面向对象 & sql语句
    MySQL--数据库面试题汇集
    MySQL优化
    JAVA日报
    JAVA日报
    JAVA日报
    JAVA日报
    JAVA日报
    《大道至简》读后感
    JAVA日报
  • 原文地址:https://www.cnblogs.com/sunshch/p/2526905.html
Copyright © 2011-2022 走看看