Asp.Net管道式的构建个我们提供了通过IHttpMoudle来订阅管线事件来达到干预HTTP请求的目的,Asp.Net的身份认证正是通过此种方式来对请求来执行身份认证的,这篇文章仅仅谈论FormsAuthenticationModule的Forms身份认证。

  地球人知道,HTTP协议是无状态的一个协议,那么什么是无状态的呢?对于Web服务器来说,对于一个浏览器发出的多次请求,WEB服务器无法区分是不是来源于同一个浏览器,服务器会将客户端每一次请求都当做是一次新的请求来对待,即使该请求是由同一个网站的同一个页面分别发起的。那么服务器是怎么知道当前请求是已经验证通过的合法登陆用户呢?既然服务器不能证明,那么这件事就必须由客户端来证明,就好比我们乘客进站一样必须凭票进站,有了车票的乘客就可以通过检票,检票的操作就是由FormsAuthenticationModule来提供。那么现在什么问题来了?当然不是挖掘机问题!是乘客的票据从哪里来的问题嘛!

  每一次客户端浏览器发起请求与服务器交互时,都会有一小段文本消息伴随着用户请求和页面在 Web 服务器和浏览器之间传递,服务器也可以通过响应来操作它,这段文本就是Cookie了,机智的人们马上就发现了通过它来携带票据是再合适不过的了,当然,Asp.Net也就是这么做的。

  当一次请求到达AuthenticationRequest阶段时,FormsAuthenticationModule会检查传入过来的Cookie,然后尝试从Cookie中解析出FormsAuthenticationTicket对象,若解析到的对象不为空,且没有过期,那么证明该用户是已经登录了系统的用户,如果开启了滑动过期时间,还会重新构建一个票据来覆盖先前的票据。这个时候会创建一个用户对象FormsIdentity,并包装到GenericPrincepal设置给Context.User.这样当前请求上下文就有了用户对象了。那么这个Cookie的名字叫什么呢?默认情况下为.ASPXAUTH,我们也可以配置Web.config/system.web/authentication/forms中来指定名称name.到此大致的认证过程已经结束了。这是对票据认证的过程。当我们第一次登陆系统时,会存在保持票据到客户端由下次携带的过程。这里FormsAuthentication.SetAuthCookie就提供了这样一个接口供我们调用,该方法的实质是将用户名和密码通过写入cookie的方式存储到客户端。有人或许会问?这样安全吗?当然安全,如果不安全微软也不能这样用这么多年了,写入cookie前会将用户名和密码做一次加密操作,默认情况下秘钥与每次回话有关,请加密key是根据回话来取得的,所以客户端很难模拟这样的一个秘钥。

  身份认证完毕后,接着是授权了,对于登陆页面来说,因为不管是否是登陆用户,都允许访问,为此在检测到时登陆页是,会设置HttpContext.SkipAuthorization=true来跳过认证。所以登陆页每次都可以访问。

  第一次写博客,发现好麻烦,希望以后坚持下去。

关于Asp.Net Forms身份认证的更多相关文章

  1. 细说ASP.NET Forms身份认证

    阅读目录 开始 ASP.NET身份认证基础 ASP.NET身份认证过程 如何实现登录与注销 保护受限制的页面 登录页不能正常显示的问题 认识Forms身份认证 理解Forms身份认证 实现自定义的身份 ...

  2. 简单的ASP.NET Forms身份认证

    读了几篇牛人的此方面的文章,自己也动手做了一下,就想有必要总结一下.当然我的文章质量自然不能与人家相比,只是写给从没有接触过这个知识点的朋友. 网站的身份认证我以前只知道session,偶然发现一些牛 ...

  3. IE11下ASP.NET Forms身份认证无法保存Cookie的问题

    IE11下ASP.NET Forms身份认证无法保存Cookie的问题 折腾了三四天,今天才找到资料,解决了. 以下会转贴,还没来得及深究,先放着,有空再学习下. ASP.NET中使用Forms身份认 ...

  4. 【转】权限管理学习 一、ASP.NET Forms身份认证

    [转]权限管理学习 一.ASP.NET Forms身份认证 说明:本文示例使用的VS2017和MVC5. 系统无论大小.牛逼或屌丝,一般都离不开注册.登录.那么接下来我们就来分析下用户身份认证. 简单 ...

  5. ASP.NET Forms身份认证详解

    ASP.NET身份认证基础 在开始今天的内容之前,我想有二个最基础的问题首先要明确: 1. 如何判断当前请求是一个已登录用户发起的? 2. 如何获取当前登录用户的登录名? 在标准的ASP.NET身份认 ...

  6. 细说ASP.NET Forms身份认证 别人写的不过很透彻就转来了以后用时再看

    阅读目录 开始 ASP.NET身份认证基础 ASP.NET身份认证过程 如何实现登录与注销 保护受限制的页面 登录页不能正常显示的问题 认识Forms身份认证 理解Forms身份认证 实现自定义的身份 ...

  7. 权限管理学习 一、ASP.NET Forms身份认证

    说明:本文示例使用的VS2017和MVC5. 系统无论大小.牛逼或屌丝,一般都离不开注册.登录.那么接下来我们就来分析下用户身份认证. 简单实现登录.注销 以前在学习.net的时候不知道什么Forms ...

  8. C# ASP.NET Forms身份认证

    原文:https://www.cnblogs.com/kyo-lynn/p/3418577.html 原文:https://www.cnblogs.com/fish-li/archive/2012/0 ...

  9. ASP.NET Forms身份认证

    asp.net程序开发,用户根据角色访问对应页面以及功能. 项目结构如下图: 根目录 Web.config 代码: <?xml version="1.0" encoding= ...

随机推荐

  1. ALM11需求类型

  2. BAT及各大互联网公司2014前端笔试面试题:JavaScript篇

    前面几题是会很基础,越下越有深度. 初级Javascript: 1.JavaScript是一门什么样的语言,它有哪些特点? 没有标准答案. 2.JavaScript的数据类型都有什么? 基本数据类型: ...

  3. DDD 领域驱动设计-谈谈 Repository、IUnitOfWork 和 IDbContext 的实践

    http://www.cnblogs.com/xishuai/p/ddd-repository-iunitofwork-and-idbcontext.html

  4. Azure 云服务中的实例端点

    Azure云服务(cloud Servive)中有三种端点类型(endpoint type):输入端点(input);内部端点(internal);实例端点(InstanceInput) 1.输入端点 ...

  5. session和request的区别

    request 请求对象 请求中保存请求过程中需要的参数 比如另一个页面需要使用的对象编号,list,map等,请求结束,就失效了 session 会话对象 除非关闭会话(到时间通常为30分钟,或者关 ...

  6. ASP.NET线程与异步

    什么是线程? 线程简单来说就是一种数据结构,用来管理这个程序的执行状态,其中包括 1.线程核心对象->寄存器的状态 2.线程环境块,是一块用户模式下的内存,包含线程的异常处理链的头部.线程的局部 ...

  7. TengineWeb服务器项目

  8. 数据库中DDL、DML、DCL和TCP概念

    1.DDL(Data Definition Language)数据库定义语言statements are used to define the database structure or schema ...

  9. Ubuntu12.10硬盘安装

    今天介绍如下如何在Win7环境下从硬盘安装Ubuntu(我使用的版本是12.10). 1.下载Ubuntu ISO镜像文件ubuntu-12.10-desktop-i386.iso. 2.使用压缩软件 ...

  10. Codeforces Round #261 (Div. 2) D 树状数组应用

    看着题意:[1,i]中等于a[i]的个数要大于[,jn]中等于a[j]的个数 且i<j,求有多少对这种(i,j)  ,i<j可是 i前面的合法个数 要大于j后面的 看起来非常像逆序数的样子 ...