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>节点的设置方式如下所示:

view plaincopy to clipboardprint?
<authentication mode="Forms">  
 <forms   
   loginUrl="AdminLogin.aspx" 
   timeout="30"   
   name=".ASPXAUTH"   
   path="/"   
   requireSSL="false"   
   cookieless="UseDeviceProfile"   
   defaultUrl="default.aspx"   
   slidingExpiration="true"   
   protection="All"   
   enableCrossAppRedirects="false">  
 </forms>  
</authentication>  
<authentication mode="Forms">
 <forms
   loginUrl="AdminLogin.aspx"
   timeout="30"
   name=".ASPXAUTH"
   path="/"
   requireSSL="false"
   cookieless="UseDeviceProfile"
   defaultUrl="default.aspx"
   slidingExpiration="true"
   protection="All"
   enableCrossAppRedirects="false">
 </forms>
</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>节点的作用是对密钥进行设置,如以下代码所示:

view plaincopy to clipboardprint?
<machineKey validation="3DES"/> 
<machineKey validation="3DES"/>

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

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

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

 view plaincopy to clipboardprint?
<authorization>  
    <deny users="?"/>  
</authorization>> 
<authorization>
 <deny users="?"/>
</authorization>>

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

view plaincopy to clipboardprint?
<?xml version="1.0" encoding="utf-8"?>  
<configuration>  
    <appSettings/>  
    <connectionStrings/>  
    <system.web>  
      <compilation debug="true" />  
            <authentication mode="Forms">  
                <forms   
                     loginUrl="AdminLogin.aspx" 
                     timeout="30"   
                     name=".ASPXAUTH"   
                     path="/"   
                     requireSSL="false"   
                     cookieless="UseDeviceProfile"   
                     defaultUrl="default.aspx"   
                     slidingExpiration="true"   
                     protection="All"   
                     enableCrossAppRedirects="false">  
                </forms>  
            </authentication>  
            <authorization>  
                <deny users="?"/>  
            </authorization>  
            <machineKey validation="3DES"/>  
    </system.web>  
</configuration> 
<?xml version="1.0" encoding="utf-8"?>
<configuration>
    <appSettings/>
    <connectionStrings/>
    <system.web>
      <compilation debug="true" />
   <authentication mode="Forms">
    <forms
      loginUrl="AdminLogin.aspx"
      timeout="30"
      name=".ASPXAUTH"
      path="/"
      requireSSL="false"
      cookieless="UseDeviceProfile"
      defaultUrl="default.aspx"
      slidingExpiration="true"
      protection="All"
      enableCrossAppRedirects="false">
    </forms>
   </authentication>
   <authorization>
    <deny users="?"/>
   </authorization>
   <machineKey validation="3DES"/>
    </system.web>
</configuration>
 

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

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

 

posted @ 2010-08-14 11:25  庙子  阅读(510)  评论(0)    收藏  举报