要使用asp.net窗体身份验证,要做的第一件事就是修改web.config文件。
首先,必须要修改<system.web>节点下的<authentication>子节点,将该子节点中的mode属性值设为"Forms"。
然后,在<authentication>节点下添加<forms>子节点,并在该子节点中配置Forms验证方式的具体参数。
第三,如果在<forms>节点中的protection属性值为All,则要在<system.web>节点下添加<machineKey>子节点,并在该子节点中设置数据验证的方法。
第四,在<system.web>节点下添加<authorization>子节点,并在该子节点下添加网站资源的访问规则。
下面,分 别介绍asp.net窗体身份验证中涉及到的web.config文件中的几个节点。
第一、<authentication>节点:
asp.net的身份验证方式由web.config文件中的<authentication>节点的mode属性值设置,该属性值可以为以下几种:
如果mode属性值为Windows,那说明使用Windows验证方式,该方式可以与IIS的身份验证方式结合起来使用。
如果mode属性值为Forms,则使用窗体的身份验证方式,常用的输入用户名和密码的验证方式就是这一种。
如果mode属性值为Passport,则使用微软的Passport Network身份验证方式,这是基于角色的一种验证方式。
如果mode属性值为None则不指定任何身份验证。
要使用窗体身份验证,mode的属性值必须为Forms。
第二、<forms>节点:
设置完<authentication>节点的mode属性值之后,我们还可以在该节点下添加一个<forms>节点,用于说明Forms身份验证的具体选项。在<forms>节点中,常用的属性值有以下几个:
loginUrl:该属性值可以指定用于登录的网页的URL,如果没有添加该属性,则默认的登录网页为根目录下的login.aspx页面。
timeout:该属性值可以指定身份验证的超时时间,也就是登录多久后认为登录超时。该属性的默认值为30,单位为分钟。
name、path、domain、requireSSL、cookieless:这几个属性都是与cookie相关的属性,由于asp.net会使用Cookie来存取身份验证票据,所以对Cookie的设置就相当重要了。
首先,name属性用于指定存储身份验证票据的Cookie的名称,默认值为".ASPXAUTH",通常是不需要进行设置的,但如果一台服务器上有多个应用程序都要进行身份验证,并且每个应用程序都需要惟一的Cookie时,就必须要设置该属性值了。
其次,path属性用于指定Cookie的路径,默认值为"/",通常也会将其设为"/",将Cookie放在网站的根目录下,这样在整个网站中都可以使用该Cookie(这是由Cookie的属性决定的,在默认情况下,一个网页创建的Cookie,只有该网页同级目录和子目录下的网页才能访问该Cookie,如果要想让其它网页也能访问该Cookie,就必须要设置Cookie的path属性)。
第三,domain属性用于指定Cookie的域。domain的设置可以扩大Cookie的访问范围,可以让Cookie跨域访问。假设http://www.aspxfans.com/中创建的Cookie如果想让http://book.aspxfans.com/中的网页访问,就必须要设置Cookie的domain。该属性的默认值为空字符串。
第四,requireSSL属性用于声明Cookie的安全性,通常情况下,Cookie使用明码的传递方式,而这种传递方式是最容易让别人监听和截取的。如果requireSSL属性值为true,那么Cookie将不能在HTTP协议中传递了,而是必须在SSL加密的HTTPS协议中传递。但该值通常为false,因为很多网站都不支持使用HTTPS协议,尤其是使用虚拟主机的网站。也许有人会问,那Cookie岂不是很不安全了?事实上 并非如此,你可以将数据加密后再存入Cookie中,这样即使是别人获得了你Cookie中的内容,也不过是一堆乱码。
第五,cookieless属性,前面说过,如果用户浏览器不支持Cookie,asp.net也可以身份验证票据放在URL中传递,该属性就是用于设置身份验证票据的传递方式。该属性一共有四个属性值,如果属性值为"UseCookies",则强制使用Cookie来传递身份验证票据。如果属性值为"UseUri",则强制使用URL来传递身份验证票据。如果属性值为"UserDeviceProfile"或"AutoDetect"则自动检测浏览器是否支持Cookie,如果浏览器支持Cookie则使用Cookie传递身份验证票据,如果浏览器不支持Cookie则使用URL传递身份验证票据,但"AutoDetect"属性值是通过一个动态的检测机制来判断浏览器是否支持Cookie。通常使用"UseDeviceProfile"。
defaultUrl:网站的缺省页面,通常为网站的首页地址。如果用户直接进入了登录页面,并在登录页面登录之后,可以使用FormsAuthentication.RedirectFromLoginPage()方法可以跳转到该网页。默认值为default.aspx。
slidingExpiration:该属性用于设置是否执行可变的会话生存期,如果为true,那么只要用户在网站上有活动状态,asp.net就会自动改变用户的会话超时时间,假设timeout属性值为20,那么只有用户在没有任何活动状态的20分钟后,才会超时(具体执行起来可能不到20分钟,因为asp.net并不会每次都重置用户的会话超时时间)。如果该属性值为false,那么就是从用户登录开始,无论用户是否处于活动状态,20分钟后都会超时。该属性通常为true。
protection:设置Cookie的加密类型。前面说过,在不能使用HTTPS协议时,Cookie一般都是通过明码传递的,因此,Cookie内容必须要进行加密。该属性可以设置Cookie加密的类型,该属性值可以为"All"、"Encryption"、"None"或"Validation"。这四个属性值的区别为:
All:对Cookie同时使用数据验证和加密方法,其中数据验证算法由<machineKey>节点中设置,该节点为<system.web>节点的子节点。该值为默认值。
Encryption:不加密和验证Cookie,不建议使用,但该属性是资源占用最小的属性值。
None:使用3DES或DES对Cookie进行加密,但不对Cookie进行数据验证。这种方式可能会受到攻击。
Validation:使用指定验证方案验证已加密的Cookie是否被更改。
enableCrossAppRedirects:该属性用于说明是否将通过身份验证的用户重新定向到其它Web应用程序的URL中。该属性的默认值为false。
第三、<machineKey>节点
如果<forms>节点中的protection属性值为All,则说明要对Cookie同时使用数据验证和加密方法,而数据验证算法由<machineKey>节点中设置,这就意味着要在<system.web>节点下添加一个<machineKey>子节点。
<machineKey>节点的作用是对密钥进行设置,设置之后,除了可以对Forms身份验证进行加密和解码之外,还可以对Cookie数据、视图状态数据(也就是ViewState中的数据)进行加密和解密。该节点的属性值主要以下几个:
decryption:该属性用于说明对数据进行解密算法,属性值可以为Auto、AES或3DES。属性值为Auto时,由asp.net的配置的默认值来确定解密算法,该值为默认值。属性值为AES时,使用AES算法,AES为数据解密的默认算法。属性值为3DES时,使用3DES算法。
validation:该属性用于指定对数据进行加密的算法,属性值可以为AES、MD5、SHA1、TripleDES,默认值为SHA1。
decryptionKey:该属性用于指定对数据进行加解密的密钥,也可以用于指定生成该密钥的进程。如果validation的属性值为TripleDES,该属性则可以用于对Forms身份验证的加解密,也可以用于视图状态的加密。该属性值可以为AutoGenerate或value。如果属性值为AutoGenerate,则说明asp.net生成随机的密钥,并存放在LSA中,该值是默认值。如果属性值为value,则指定一个手动分配的密钥,该密钥必须是十六进制的字符串。在使用DES加密时,密钥的长度必须是16位,使用3DES加密时,密钥长度必须是48位,只有使用128位加密的情况下,才能使用3DES。另外,decryptionKey属性值中可以添加IsolateApps修饰符,该修饰符可以让asp.net将每个应用程序的ID为每个应用程序生成一个唯一的密钥。该属性的默认值为"AutoGenerate,IsolateApps" 。
validationKey: 该属性用于指定对数据进行验证的密钥,与decryptionKey类似,在此就不多介绍了。
第四、 <authorization>节点
<authentication>节点用于设置asp.net的身份验证方式,也就是要怎么去验证用户身份,但验证完用户身份之后,哪些用户可以访问资源,<authentication>节点就不能进行设置了,这个使用就必须要使用到<authorization>节点,该节点可以设置应用程序的授权,只有授权的用户才能访问网站资源。
<authorization>节点下面可以有两种子节点:<allow>和<deny>。其中<allow>节点用于说明允许对网站资源访问的规则。<deny>节点用于说明禁止对网站资源访问的规则。
以<deny>节点为例,该节点中有三个属性:
users:该属性用于指定拒绝访问网站资源的用户列表,用户与用户之间使用逗号作为分隔符。如果该属性值为?,则表示拒绝匿名用户,如果属性值为*,则表示拒绝所有用户。
roles:该属性用于指定拒绝访问网站资源的角色列表,角色与角色之间使用逗号作为分隔符。
verbs:该属性值是一个使用逗号分隔的HTTP传输方式列表(GET、HEAD、POST和DEBUG),这些传输方法拒绝访问网络资源。
<allow>节点与<deny>节点类似,只不是该节点设置的是允许对网站资源访问的规则。
|
请发表评论