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. [六]SpringMvc学习-文件上传

    1.单文件上传 1.1修改配置文件 <bean id="multipartResolver" class="org.springframework.web.mult ...

  2. Fragment详解

    1 Fragment简介 1.1 Fragment的设计初衷 Android3.0引入Fragment的初衷是为大屏幕的设备提供更加灵活的动态UI设计,由于大屏设备可以容纳更多的UI组件,且这些UI组 ...

  3. CentOS6.5安装telnet

    原文地址:http://www.cnblogs.com/zhongshengzhen/ 1.检查是否已经安装telnet [root@localhost ~]# rpm -qa | grep teln ...

  4. 汽车行业的DMS系统 IT不变应万变

    DMS是针对4S店的整车销售.零配件仓库.售后维修服务(含车间管理).客服服务涵盖4S店业务进行完整管理的系统,是对销售.维修.客户关系进行一系列的整合.其中,服务的预约.进店接待都有着跟踪处理,客户 ...

  5. Windows下记事本编辑的Shell脚本放到Linux下执行出错,格式问题(/bin/bash^M: bad interpreter: 没有那个文件或目录)

    错误: /bin/bash^M: bad interpreter: 没有那个文件或目录 解决方案: 运行脚本时出现了这样一个错误,打开之后并没有找到所谓的^M,查了之后才知道原来是文件格式的问题,也就 ...

  6. mysqlnd cannot connect to MySQL 4.1+ using the old insecure authentication的解决方法

    直接命令行操作没有问题,但是PHP连接就会报上面的错误. SET old_passwords =0; USE mysql; UPDATE user SET password =PASSWORD('yo ...

  7. hibernate 使用C3P0数据源

    1.导入jar包: hibernate-release-4.3.5.Final/lib/optional/*.jar 2.增加配置: <!-- 配置 C3P0 数据源 --> <pr ...

  8. js操作json添加元素和数据的方法

    function addServerUrlToJson() { var json_tem = [{"name":"a","value":1} ...

  9. jquery 源码分析学习地址

    http://www.ccvita.com/121.htmljQuery工作原理解析以及源代码示例http://www.cnblogs.com/haogj/archive/2010/04/19/171 ...

  10. Struts2 Action的访问路径

    1.     Action的访问路径 扩展名 缺省以.action结尾,请参考:default.properties文件,可以通过配置改变这一点: <constant name="st ...