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

相关文章

MySQL 中的 CAST 函数详解及常见用法

《MySQL中的CAST函数详解及常见用法》CAST函数是MySQL中用于数据类型转换的重要函数,它允许你将一个值从一种数据类型转换为另一种数据类型,本文给大家介绍MySQL中的CAST... 目录mysql 中的 CAST 函数详解一、基本语法二、支持的数据类型三、常见用法示例1. 字符串转数字2. 数字

SpringBoot中SM2公钥加密、私钥解密的实现示例详解

《SpringBoot中SM2公钥加密、私钥解密的实现示例详解》本文介绍了如何在SpringBoot项目中实现SM2公钥加密和私钥解密的功能,通过使用Hutool库和BouncyCastle依赖,简化... 目录一、前言1、加密信息(示例)2、加密结果(示例)二、实现代码1、yml文件配置2、创建SM2工具

MyBatis-Plus 中 nested() 与 and() 方法详解(最佳实践场景)

《MyBatis-Plus中nested()与and()方法详解(最佳实践场景)》在MyBatis-Plus的条件构造器中,nested()和and()都是用于构建复杂查询条件的关键方法,但... 目录MyBATis-Plus 中nested()与and()方法详解一、核心区别对比二、方法详解1.and()

Spring IoC 容器的使用详解(最新整理)

《SpringIoC容器的使用详解(最新整理)》文章介绍了Spring框架中的应用分层思想与IoC容器原理,通过分层解耦业务逻辑、数据访问等模块,IoC容器利用@Component注解管理Bean... 目录1. 应用分层2. IoC 的介绍3. IoC 容器的使用3.1. bean 的存储3.2. 方法注

MySQL 删除数据详解(最新整理)

《MySQL删除数据详解(最新整理)》:本文主要介绍MySQL删除数据的相关知识,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录一、前言二、mysql 中的三种删除方式1.DELETE语句✅ 基本语法: 示例:2.TRUNCATE语句✅ 基本语

Python内置函数之classmethod函数使用详解

《Python内置函数之classmethod函数使用详解》:本文主要介绍Python内置函数之classmethod函数使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地... 目录1. 类方法定义与基本语法2. 类方法 vs 实例方法 vs 静态方法3. 核心特性与用法(1编程客

Python函数作用域示例详解

《Python函数作用域示例详解》本文介绍了Python中的LEGB作用域规则,详细解析了变量查找的四个层级,通过具体代码示例,展示了各层级的变量访问规则和特性,对python函数作用域相关知识感兴趣... 目录一、LEGB 规则二、作用域实例2.1 局部作用域(Local)2.2 闭包作用域(Enclos

Python实现对阿里云OSS对象存储的操作详解

《Python实现对阿里云OSS对象存储的操作详解》这篇文章主要为大家详细介绍了Python实现对阿里云OSS对象存储的操作相关知识,包括连接,上传,下载,列举等功能,感兴趣的小伙伴可以了解下... 目录一、直接使用代码二、详细使用1. 环境准备2. 初始化配置3. bucket配置创建4. 文件上传到os

Java内存分配与JVM参数详解(推荐)

《Java内存分配与JVM参数详解(推荐)》本文详解JVM内存结构与参数调整,涵盖堆分代、元空间、GC选择及优化策略,帮助开发者提升性能、避免内存泄漏,本文给大家介绍Java内存分配与JVM参数详解,... 目录引言JVM内存结构JVM参数概述堆内存分配年轻代与老年代调整堆内存大小调整年轻代与老年代比例元空

Python中注释使用方法举例详解

《Python中注释使用方法举例详解》在Python编程语言中注释是必不可少的一部分,它有助于提高代码的可读性和维护性,:本文主要介绍Python中注释使用方法的相关资料,需要的朋友可以参考下... 目录一、前言二、什么是注释?示例:三、单行注释语法:以 China编程# 开头,后面的内容为注释内容示例:示例:四