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. [Objective-c 基础 - 2.11] SEL数据类型

    A.概念 1.SEL类型代表方法 2.每个方法都有一个对应的SEL类型的数据 3.实例对象调用方法 (1)编译器会把类的方法包装成SEL类型的数据, (2)根据SEL数据找到方法地址,缓存此地址 (3 ...

  2. 转载 深入理解JavaScript中的this关键字

    转载原地址: http://www.cnblogs.com/rainman/archive/2009/05/03/1448392.html 深入理解JavaScript中的this关键字   1. 一 ...

  3. 关于UIImage类的对象两种初始化方法的区别

    1.imageNamed: UIImage *image = [UIImage imageNamed:"]; UIImage的类方法 第一次读取图片的时候,先把这个图片放到缓存中,下次再使用 ...

  4. MSSQLSERVER数据库- 作业调度定时备份数据库

    作业调度和备份数据库是常见的行为,掌握这两项技术我觉的非常有必要. 在网上找到这个示例,记录在这里 备份数据库的SQL语句 --自动备份并保存最近5天的SQL数据库作业脚本 ) DECLARE @da ...

  5. android侧滑菜单笔记

    一.SlidingPaneLayout v4包下的控件,使用简单,功能简洁.官方文档明确说明该控件只能左侧滑动.使用如下: <android.support.v4.widget.SlidingP ...

  6. 射击的乐趣:WIN32诠释打飞机游戏源码补充

    打飞机游戏源码补充 从指定位置加载bmp并显示到对话框. , TRUE);, , LR_LOADFROMFILE);          {         BITMAP bmpinfo;        ...

  7. paip.c++ 常用类库attilax总结

    paip.c++ 常用类库attilax总结 VCL: WINDOWS平台最好的类库了..推荐使用..开发效率最高. 1 QT..推荐使用..开发效率比较高. 1 GTK(GTKMM)...开发效率没 ...

  8. iOS开发——UI篇OC篇&UICollectionView详解+实例

    UICollectionView详解+实例 实现步骤: 一.新建两个类 1.继承自UIScrollView的子类,比如HMWaterflowView * 瀑布流显示控件,用来显示所有的瀑布流数据 2. ...

  9. js倒计时功能

    <input id="countdown" type="text" value="140时50分20秒"> <script ...

  10. PAT 1005

    1005. Spell It Right (20) Given a non-negative integer N, your task is to compute the sum of all the ...