本文大量摘抄 asp.net Forms表单验证 使用经验及验证流程分析

尽管使用Asp.net做过几个简单项目,但是一直没有真正理解认证和授权这一块是怎么回事。打开vs 2015/2017的模板,却连内置框架中的Identity都看不懂。找了网上一些文章,发现都提到membership和表单验证。于是决定把这所有东西都弄清楚。在学习过程中,除了书本能让我收获有体系知识,网上很多文章写得非常好,能够让人很快明白某一个点的知识。

以下把自己学习过程整理为几篇文章,算是个笔记,水平有限,当是给自己复习的笔记 。

Asp.net 验证

验证是一个这样的过程,通过用户提供的证明信息,对于有效合法的信息产生一个唯一 可识别的标记(Identity)的过程。这对于一个网站系统来说其实包含几件事情:
1.凭据输入(例如登录页面)
2.凭据的管理,如CURE,有效性及安全性的维护等。
3.凭据的存储
而在membership 出来之前 (2005年之前),Asp.net 的验证其实只有以下4种:
Windows 验证; 
表单验证;
Passport 验证;
自定义验证流程
显然以上的几种,除了自定义验证流程,其它三种都无法完全实现验证涉及的整个流程。以下通过尝试解析表单验证过程来说明验证中需要涉及的事情以及表单验证存在的一些问题。

表单验证:

表单验证是一个基于票据(ticket-based)也称为基于令牌(token-based)的系统。这意味着当用户登录系统后,表单验证模块得到一个包含基本用户信息的票据(ticket). 这些信息被存放在加密过的cookie里面,这些cookie 和响应绑定在一起,因此每一次后续请求都会被自动提交到服务器。

Asp.net的处理流程具体是这样的:
1. 用户在没有登录的情况访问网站,在浏览器输入请求到了IIS,正常情况下通过IIS传送到ASP.Net管道;
2. Asp.net FormsAuthenticationMoudle检查请求是否有有效cookie,如果没有,返回给用户登录页面;此时HttpContext.User.IsAuthenticated=false;
3. 用户输入凭据,提交。
4. 服务端程序检查用户名和密码,如果正确,就调用FormsAuthentication.SetAuthCookie方法生成登录cookie;此时如果没有权限设定的话,HttpContext.User.IsAuthenticated=true.
5. 如果还有权限设定,则测试授权;
6.认证和授权都通过后,HttpContext.User.IsAuthenticated=true. 返回用户请求的页面。
7.用户再次请求需要登录的页面;
8.FormsAuthenticationModule检查到了用户身份的cookie,HttpContext.User.IsAuthenticated = true
9. 在Asp.net 管道Authroized有效的阶段内,用户不需要再登录即可以一直浏览网站

图片来自    《ASP.NET 4 高级程序设计》第4版

实现的关键步骤

(完全摘自 asp.net Forms表单验证 使用经验及验证流程分析 , 摘抄是两个原因,一是为了自己以后遇到forms验证可以快速回顾相关知识点,二是vs版本太新了,没有相应的.net 模板可以自己实现):

一,配置

假设有这样一个目录,需求这样子:
两个文件夹分别为User和Admin,在每一个文件夹中又有login.aspx、index.aspx和web.config。通用户访问User文件夹需要首先要在用户登陆界面进行登陆,成功后才能访问用户的index.aspx。而管理员则首先要在Admin的登陆界面进行登陆,才能访问Admin中的index.aspx。

在根目录的Web.config下,需要做这样的配置

在forms元素里,设置了name和loginUrl。 name表示cookie的名字。LoginUrl 顾名思义就是登陆页面的地址。如果说用户没有权限访问某一页面,就会被重定向到这个页面。

两个子目录下web.config的配置

在这个配置文件中,不能配置“验证”节的内容(该内容只能在虚拟目录的根目录web.config中配置),我们只能对“授权”节进行配置。上述的location的作用是表示该路径不需要进行授权检查, 而其他路径,则不希望未登陆的用户或网站管理员登陆,因此使用<allow roles="user">来允许只有角色为user的用户访问,而其他任何用户都拒绝访问。

二、关键代码

在global.asax中有一个Application_AuthenticateRequest事件,该事件会在服务器决定该用户浏览器是否应该跳转前发生。因此,我们只要在这里对用户角色进行配置,就可以达到目的。

注意:不能在同一台电脑上即登陆用户界面又登陆管理员界面。因为使用Forms名称所能保留的cookie只可能是一个,所以如果登陆了管理员界面后,接着登陆用户界面,就会覆盖原来的cookie值。

存在问题:

1.必须创建登录界面供用户登录;

2.必须维护用户凭证所在的目录;

3.必须采取额外的措施来防止网络中传输的截获(用户信息的加密)。

Asp.net Authenticatiion Authorization(认证与授权)——表单验证相关推荐

  1. 快速理解ASP.NET Core的认证与授权

    ASP.NET Core的认证与授权已经不是什么新鲜事了,微软官方的文档对于如何在ASP.NET Core中实现认证与授权有着非常详细深入的介绍.但有时候在开发过程中,我们也往往会感觉无从下手,或者由 ...

  2. Web应用中基于密码的身份认证机制(表单认证、HTTP认证: Basic、Digest、Mutual)

    Web应用中基于密码的身份认证机制 背景概念 认证(Authentication) 会话管理 1 表单认证(Form-Based Authentication) 1.1 介绍 1.2 流程 2 通用的 ...

  3. ASP.NET MVC 2 学习笔记二: 表单的灵活提交

    ASP.NET MVC 2 学习笔记二:  表单的灵活提交 前面说到有做到公司内部的一个请假系统,用的是ASP.NET MVC 2+Entity Framework.虽然EF(Entity Frame ...

  4. asp.net 2.0 下的表单验证Cookieless属性

    刚刚在洗衣服的时候突然想到今天在做WAP程序的表单验证的时候遇到一个问题,在不支持Cookies的移动设备模拟器中无法正常进行表单验证,联想到昨天使用web.config设置cookieless属性时 ...

  5. Asp.net2.0下的表单验证Cookieless属性

    刚刚在洗衣服的时候突然想到今天在做WAP程序的表单验证的时候遇到一个问题,在不支持Cookies的移动设备模拟器中无法正常进行表单验证,联想到昨天使用web.config设置cookieless属性时 ...

  6. 【转】ASP.NET 表单验证实现浅析

    对于Web应用的表单身份验证,因为公司有一个类库,采用 Session 实现,所以一直都没有去仔细了解.其实我并不赞成在 .NET 中用 Session 实现身份验证,毕竟 .NET 提供了一个强大的 ...

  7. 基于 猫冬的 jQuery formValidator表单验证 的asp.net 控件

    为了方便在asp.net中使用,封装了一下 <猫冬 的 jQuery formValidator表单验证> 控件 其实也不是什么控件,只是一个类,方便生成前台js. 特点: 1.后台生成的 ...

  8. Laravel 5.5 表单验证

    简介 Laravel 提供了多种方法来验证请求输入数据.默认情况下,Laravel 的控制器基类使用 ValidatesRequests trait,该 trait 提供了便捷方法通过各种功能强大的验 ...

  9. JQuery表单验证插件EasyValidator,超级简单易用!

    本插件的宗旨是:用户无需写一行JS验证代码,只需在要验证的表单中加入相应的验证属性即可,让验证功能易维护,可扩展,更容易上手. DEMO中已经包含了常用的正则表达式,可以直接复用,为了考虑扩展性,所以 ...

最新文章

  1. 导出到Excel的操作
  2. 【技术】TCP 的固定窗口和滑动窗口
  3. 登录mysql报错2059_navicat连接mysql8.0+版本报错2059
  4. 客户端渲染换为服务器端渲染_服务器与客户端渲染(AngularJS与服务器端MVC)
  5. 在Asp.net MVC使用jqGrid--代码少点再少点
  6. kubernetes之flannel 网络分析
  7. 使用动态SQL获取具有非空字段的自定义表结构
  8. Linux用户管理(六)Linux磁盘管理
  9. UVALive3713_Astronauts
  10. 记一次Win10环境python3.7安装dlib模块趟过的坑
  11. C/S和B/S和RIA
  12. 南京工程学院《DSP技术及应用》期末试卷
  13. 屏幕取色软件ColorPix
  14. Manjaro使用教程
  15. 计算机网络flash实训报告,flash动画实训总结精选 .doc
  16. 利用手机传感器测量高度
  17. 【面向对象-09】子类、父类方法重写和覆盖
  18. 404是什么意思,404错误页面有什么用?
  19. 输入国家名按字典顺序进行排序
  20. GPS 入门 6 —— 各国卫星导航系统比较(北斗、伽利略、GLONASS、GPS)(转)

热门文章

  1. 免费外链相册十三大平台
  2. 程序员的维权之路-如何通过劳动仲裁拿到4个月的补偿
  3. vue+element-ui
  4. 记录——超声相控阵,斜入射;大道理(取自主论文)
  5. java写红白机_Java 开发的编程噩梦,这些坑你没踩过算我输
  6. oracle添加分区语句_oracle表分区增加分区
  7. 高效查表判断胡牌算法的lua版本
  8. 华中农业大学c语言程序设计在线作业答案,线性代数历年考试卷资料(华南理工大学)华中农业大学试卷 答案.pdf...
  9. ASP.NET MVC5 高级教程 学习笔记
  10. 医疗微信营销:微动力新生活