asp.net中的窗体身份验证(完整篇之附录:web.config中相应节点详解)

本文主要是介绍asp.net中的窗体身份验证(完整篇之附录:web.config中相应节点详解),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

    要使用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属性值设置,该属性值可以为以下几种:

  1. 如果mode属性值为Windows,那说明使用Windows验证方式,该方式可以与IIS的身份验证方式结合起来使用。
  2. 如果mode属性值为Forms,则使用窗体的身份验证方式,常用的输入用户名和密码的验证方式就是这一种。
  3. 如果mode属性值为Passport,则使用微软的Passport Network身份验证方式,这是基于角色的一种验证方式。
  4. 如果mode属性值为None则不指定任何身份验证。

    要使用窗体身份验证,mode的属性值必须为Forms。

 

    第二、<forms>节点:

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

  1. loginUrl:该属性值可以指定用于登录的网页的URL,如果没有添加该属性,则默认的登录网页为根目录下的login.aspx页面。
  2. timeout:该属性值可以指定身份验证的超时时间,也就是登录多久后认为登录超时。该属性的默认值为30,单位为分钟。
  3. 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”。
  4. defaultUrl:网站的缺省页面,通常为网站的首页地址。如果用户直接进入了登录页面,并在登录页面登录之后,可以使用FormsAuthentication.RedirectFromLoginPage()方法可以跳转到该网页。默认值为default.aspx。
  5. slidingExpiration:该属性用于设置是否执行可变的会话生存期,如果为true,那么只要用户在网站上有活动状态,asp.net就会自动改变用户的会话超时时间,假设timeout属性值为20,那么只有用户在没有任何活动状态的20分钟后,才会超时(具体执行起来可能不到20分钟,因为asp.net并不会每次都重置用户的会话超时时间)。如果该属性值为false,那么就是从用户登录开始,无论用户是否处于活动状态,20分钟后都会超时。该属性通常为true。
  6. protection:设置Cookie的加密类型。前面说过,在不能使用HTTPS协议时,Cookie一般都是通过明码传递的,因此,Cookie内容必须要进行加密。该属性可以设置Cookie加密的类型,该属性值可以为“All”、“Encryption”、“None”或“Validation”。这四个属性值的区别为:
    • All:对Cookie同时使用数据验证和加密方法,其中数据验证算法由<machineKey>节点中设置,该节点为<system.web>节点的子节点。该值为默认值。
    • Encryption:不加密和验证Cookie,不建议使用,但该属性是资源占用最小的属性值。
    • None:使用3DES或DES对Cookie进行加密,但不对Cookie进行数据验证。这种方式可能会受到攻击。
    • Validation:使用指定验证方案验证已加密的Cookie是否被更改。
  7. enableCrossAppRedirects:该属性用于说明是否将通过身份验证的用户重新定向到其它Web应用程序的URL中。该属性的默认值为false。

    第三、<machineKey>节点

    如果<forms>节点中的protection属性值为All,则说明要对Cookie同时使用数据验证和加密方法,而数据验证算法由<machineKey>节点中设置,这就意味着要在<system.web>节点下添加一个<machineKey>子节点。

    <machineKey>节点的作用是对密钥进行设置,设置之后,除了可以对Forms身份验证进行加密和解码之外,还可以对Cookie数据、视图状态数据(也就是ViewState中的数据)进行加密和解密。该节点的属性值主要以下几个:

  1. decryption:该属性用于说明对数据进行解密算法,属性值可以为Auto、AES或3DES。属性值为Auto时,由asp.net的配置的默认值来确定解密算法,该值为默认值。属性值为AES时,使用AES算法,AES为数据解密的默认算法。属性值为3DES时,使用3DES算法。
  2. validation:该属性用于指定对数据进行加密的算法,属性值可以为AES、MD5、SHA1、TripleDES,默认值为SHA1。
  3. decryptionKey:该属性用于指定对数据进行加解密的密钥,也可以用于指定生成该密钥的进程。如果validation的属性值为TripleDES,该属性则可以用于对Forms身份验证的加解密,也可以用于视图状态的加密。该属性值可以为AutoGenerate或value。如果属性值为AutoGenerate,则说明asp.net生成随机的密钥,并存放在LSA中,该值是默认值。如果属性值为value,则指定一个手动分配的密钥,该密钥必须是十六进制的字符串。在使用DES加密时,密钥的长度必须是16位,使用3DES加密时,密钥长度必须是48位,只有使用128位加密的情况下,才能使用3DES。另外,decryptionKey属性值中可以添加IsolateApps修饰符,该修饰符可以让asp.net将每个应用程序的ID为每个应用程序生成一个唯一的密钥。该属性的默认值为“AutoGenerate,IsolateApps” 。
  4. validationKey: 该属性用于指定对数据进行验证的密钥,与decryptionKey类似,在此就不多介绍了。

    第四、 <authorization>节点

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

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

    以<deny>节点为例,该节点中有三个属性:

  1. users:该属性用于指定拒绝访问网站资源的用户列表,用户与用户之间使用逗号作为分隔符。如果该属性值为?,则表示拒绝匿名用户,如果属性值为*,则表示拒绝所有用户。
  2. roles:该属性用于指定拒绝访问网站资源的角色列表,角色与角色之间使用逗号作为分隔符。
  3. verbs:该属性值是一个使用逗号分隔的HTTP传输方式列表(GET、HEAD、POST和DEBUG),这些传输方法拒绝访问网络资源。

    <allow>节点与<deny>节点类似,只不是该节点设置的是允许对网站资源访问的规则,在此就不再赘述了。

 

 

 

 

=============================

原创不容易,转载请注明出处。

 

相关链接:

1、asp.net中的窗体身份验证(最简单篇)

2、asp.net中的窗体身份验证(分目录验证篇)

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

4、asp.net中的窗体身份验证(完整篇之二:asp.net的窗体身份验证过程)

5、asp.net中的窗体身份验证(完整篇之三:用户登录页面)

6、asp.net中的窗体身份验证(完整篇之四:获得用户数据)

7、asp.net中的窗体身份验证(完整篇之五:退出登录)

8、asp.net中的窗体身份验证(完整篇之附录:web.config中相应节点详解)

9、asp.net中的窗体身份验证(不同的角色访问不同的目录)

10、asp.net中的窗体身份验证(验证HTML文件)

11、asp.net中的窗体身份验证(完整篇之六:登出后不能通过后退回来面来的页面)

 

 

这篇关于asp.net中的窗体身份验证(完整篇之附录:web.config中相应节点详解)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/590724

相关文章

Java Jackson核心注解使用详解

《JavaJackson核心注解使用详解》:本文主要介绍JavaJackson核心注解的使用,​​Jackson核心注解​​用于控制Java对象与JSON之间的序列化、反序列化行为,简化字段映射... 目录前言一、@jsonProperty-指定JSON字段名二、@JsonIgnore-忽略字段三、@Jso

MySQL中隔离级别的使用详解

《MySQL中隔离级别的使用详解》:本文主要介绍MySQL中隔离级别的使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录引言undo log的作用MVCC的实现有以下几个重要因素如何根据这些因素判断数据值?可重复读和已提交读区别?串行化隔离级别的实现幻读和可

Python解决雅努斯问题实例方案详解

《Python解决雅努斯问题实例方案详解》:本文主要介绍Python解决雅努斯问题实例方案,雅努斯问题是指AI生成的3D对象在不同视角下出现不一致性的问题,即从不同角度看物体时,物体的形状会出现不... 目录一、雅努斯简介二、雅努斯问题三、示例代码四、解决方案五、完整解决方案一、雅努斯简介雅努斯(Janu

通过C#获取Excel单元格的数据类型的方法详解

《通过C#获取Excel单元格的数据类型的方法详解》在处理Excel文件时,了解单元格的数据类型有助于我们正确地解析和处理数据,本文将详细介绍如何使用FreeSpire.XLS来获取Excel单元格的... 目录引言环境配置6种常见数据类型C# 读取单元格数据类型引言在处理 Excel 文件时,了解单元格

MySQL连接池(Pool)常用方法详解

《MySQL连接池(Pool)常用方法详解》本文详细介绍了MySQL连接池的常用方法,包括创建连接池、核心方法连接对象的方法、连接池管理方法以及事务处理,同时,还提供了最佳实践和性能提示,帮助开发者构... 目录mysql 连接池 (Pool) 常用方法详解1. 创建连接池2. 核心方法2.1 pool.q

9个SpringBoot中的自带实用过滤器使用详解

《9个SpringBoot中的自带实用过滤器使用详解》在SpringBoot应用中,过滤器(Filter)是处理HTTP请求和响应的重要组件,SpringBoot自带了许多实用的过滤器,如字符编码,跨... 目录1. CharacterEncodingFilter - 字符编码过滤器功能和配置手动配置示例2

Spring Boot 常用注解详解与使用最佳实践建议

《SpringBoot常用注解详解与使用最佳实践建议》:本文主要介绍SpringBoot常用注解详解与使用最佳实践建议,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要... 目录一、核心启动注解1. @SpringBootApplication2. @EnableAutoConfi

Android与iOS设备MAC地址生成原理及Java实现详解

《Android与iOS设备MAC地址生成原理及Java实现详解》在无线网络通信中,MAC(MediaAccessControl)地址是设备的唯一网络标识符,本文主要介绍了Android与iOS设备M... 目录引言1. MAC地址基础1.1 MAC地址的组成1.2 MAC地址的分类2. android与I

Redis高可用-主从复制、哨兵模式与集群模式详解

《Redis高可用-主从复制、哨兵模式与集群模式详解》:本文主要介绍Redis高可用-主从复制、哨兵模式与集群模式的使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝... 目录Redis高可用-主从复制、哨兵模式与集群模式概要一、主从复制(Master-Slave Repli

一文详解如何在Vue3中封装API请求

《一文详解如何在Vue3中封装API请求》在现代前端开发中,API请求是不可避免的一部分,尤其是与后端交互时,下面我们来看看如何在Vue3项目中封装API请求,让你在实现功能时更加高效吧... 目录为什么要封装API请求1. vue 3项目结构2. 安装axIOS3. 创建API封装模块4. 封装API请求