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. APUE读书笔记-第17章-高级进程间通信

    17.1 引言 *两种高级IPC:基于STREAMS的管道(STREAMS-based pipe)以及UNIX域套接字(UNIX domain socket)可以在进程间传送打开文件描述符.服务进程可 ...

  2. unable to load default svn client myeclipse SVN安装,wen7 64位安装SVN

    在安装完后连接svn时出现unable to load default svn client的错误提示,百度知道是版本不对,我安装的是1.8的版本,插件按成1.6的了,只需下载1.8插件安装就行了 安 ...

  3. PHOTOSHOP 中画笔工具和铅笔工具的一个小小差别

    今天在作图的时候偶然发现的一个以前并没有在意画笔和铅笔的小小区别,情况是这样的,我在做图像处理,需要一个单像素的闭合曲线灰度图来做实验,然后用画笔工具把直径调到1之后去作图,放大之后发现,跟预想的结果 ...

  4. XMPP——Smack[1]连接、登陆及账户操作

    临毕业前,应需求,花了三天写了个小的聊天工具,貌似简陋得很….若有机会再完善吧,目前毕业季,处理毕业事宜,还要准备即将的入职. 眼瞅着大学四年就这么结束了,哎. 开始吧,四篇博文简单介绍下基本实现,由 ...

  5. MySQL数据库导入外部*.sql文件具体步骤

    如需转载请标明出处:http://blog.csdn.net/itas109 环境: MySQL  50515 Navicat for MySQL 一.导入前提 确保导入的sql文件的host和por ...

  6. ALERT日志中常见监听相关报错之中的一个:ORA-609错误的排查

    參考MOS文档有: Troubleshooting Guide ORA-609 : Opiodr aborting process unknown ospid (文档 ID 1121357.1) Al ...

  7. ThinkPHP3.1快速入门(12)自动验证

    自动验证是ThinkPHP模型层提供的一种数据验证方法,可以在使用create创建数据对象的时候自动进行数据验证. 验证规则 数据验证可以进行数据类型.业务规则.安全判断等方面的验证操作.数据验证有两 ...

  8. Codeforces Round #323 (Div. 2) C. GCD Table 暴力

    C. GCD Table Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/583/problem/C ...

  9. zookeeper配置同步zookeeper编程

    分布式助手Zookeeper(四) kissyoudyb 2013-12-05 17:41 阅读:33 评论:0     分布式助手Zookeeper(三) kissyoudyb 2013-12-05 ...

  10. iOS开发——面试指导

    iOS面试指导 一 经过本人最近的面试和对面试资料的一些汇总,准备记录这些面试题,以便ios开发工程师找工作复习之用,本人希望有面试经验的同学能和我同时完成这个模块,先出面试题,然后会放出答案. 1. ...