Asp.net Security框架(1)
Security框架主要用于身份认证的,基本上所有Asp.net项目有意或者无意的都在使用的,框架的源码包含在Katana项目下。
最常见的使用方式或许就是SignIn来给客户端浏览器生成包含身份信息的Cookie了,在Cookie的有效期内所有对Web网站的访问都会携带这样的Cookie,被CookieMiddleware解析出身份信息并设置到HttpContext的User属性上。
我认为Security框架核心就两个类
1.AuthenticationMiddleware
将身份认证模块添加到应用程序的处理管道中,配置Options参数
2.AuthenticationHandler
真正处理身份认证的逻辑代码,当发起登录操作的时候会创建经过加密的身份信息Token以及每次Request请求到来时提取Token信息解析出对应的ClaimsIdentity
在AuthenticationMiddleware的Invoke方法中会获取一个对应的AuthenticationHandler实例,比如CookieAuthenticationHandler,其AuthenticateCoreAsync方法被执行,在方法体中,会尝试获取存放身份信息的Cookie,并解析出AuthenticationTicket实例,如果Token未过期那么就会返回这样一个AuthenticationTicket实例,最后其Identity属性将会被设置到HttpContext的User属性上,在验证的过程中可以通过配置Options的Provider(类型为ICookieAuthenticationProvider)来添加扩展,自定义决定是否成功返回AuthenticationTicket。
当我们熟悉上述两个类的源码,基本上身份认证的整体逻辑就了解的差不多了,另外我们真实项目中常用的还有一个OwinContext的类型为IAuthenticationManager的属性--Authentication,常用的是它的SignIn,SignOut,Challenge三个方法,它们本身的执行逻辑是很简单的就是将相应的参数信息保存起来,AuthenticationHandler会调用Response.OnSendingHeaders来注册一个返回Response信息前的执行逻辑,在这个执行逻辑中会分别尝试获取SignIn,SignOut,Challenge三个方法调用时所保存的参数信息。
1.在OnSendingHeaders的执行逻辑中如果判断出SignIn被执行了那么会获取到SignIn的AuthenticationTicket,调用TicketDataFormat的Protect方法将AuthenticationTicket序列化为字符串后设置到Cookie上,返回Response。在这个执行过程中Security框架为我们提供了一些扩展点,我们可以修改AuthenticationTicket的数据。
2.如果执行过SignOut,那么OnSendingHeaders的执行逻辑会尝试删除上一步所创建的包含身份信息的Cookie,并执行一条Redirect语句跳转到StartUp类中配置的LoginPath,同样也提供了扩展点方便使用者修改参数。
3.如果执行过Challenge,那么OnSendingHeaders的执行逻辑中判断得到Response.StatusCode为401,同时LoginPath存在数据,那么就会执行Redirect语句跳转到LoginPath
有一点需要注意如果配置了Token过期时间,并且SlidingExpiration为true(默认为true),同时request请求发生时尚未超时,那么Token会被renew的
(纯粹是为了下个月找工作而准备的一系列博文,每一篇都尽量精简,并非给初学者看的☺)
Asp.net Security框架(1)的更多相关文章
- Asp.net Security框架(2)
Asp.net 的Security框架除了提供Cookies,OAuth,ActiveDirectory等多个用户认证实现,基本上已经满足业务项目的开发需要了. 当需要实现OAuth2.0服务器端实现 ...
- ASP.NET Core 框架源码地址
ASP.NET Core 框架源码地址 https://github.com/dotnet/corefx 这个是.net core的 开源项目地址 https://github.com/aspnet ...
- 从零开始实现asp.net MVC4框架网站的用户登录以及权限验证模块 详细教程
从零开始实现asp.net MVC4框架网站的用户登录以及权限验证模块 详细教程 用户登录与权限验证是网站不可缺少的一部分功能,asp.net MVC4框架内置了用于实现该功能的类库,只需要简单搭 ...
- 探索ASP.NET MVC框架之路由系统
引言 对于ASP.NET MVC的路由系统相信大家肯定不陌生.今天我们就深入ASP.NET的框架内部来看一下路由系统到底是怎么通过我们给出的地址(例如:/Home/Index)解析出Controlle ...
- Asp.net MVC5 框架揭秘 S412 实例解析 – 绝妙的扩展 模式的胜利
Asp.net MVC5 框架是个 开源的,处处可扩展的框架. 蒋先生 在他的这本书里 对如何理解框架,如何扩展框架, 给出了大量的说明和实例. 先上效果图 大部分做传统BS 的同学看到这个页面,脑海 ...
- 写自己的ASP.NET MVC框架(上)
http://www.cnblogs.com/fish-li/archive/2012/02/12/2348395.html 阅读目录 开始 ASP.NET程序的几种开发方式 介绍我的MVC框架 我的 ...
- 学习“迷你ASP.NET MVC框架”后的小结
看蒋老师MVC的书第二个大收获可以是算是看了这个迷你ASP.NET MVC框架了,虽然它远不如真正ASP.NET MVC(下文简称“MVC”)那么复杂庞大,但在迷你版中绕来绕去也够呛的.这部分我看了几 ...
- 如何用asp.net MVC框架、highChart库从sql server数据库获取数据动态生成柱状图
如何用asp.net MVC框架.highChart库从sql server数据库获取数据动态生成柱状图?效果大概是这样的,如图: 请问大侠这个这么实现呢?
- BrnShop开源网上商城第二讲:ASP.NET MVC框架
在团队设计BrnShop的web项目之初,我们碰到了两个问题,第一个是数据的复用和传递,第二个是大mvc框架和小mvc框架的选择.下面我依次来说明下. 首先是数据的复用和传递:对于BrnShop的每一 ...
随机推荐
- Exp5 MSF基础应用 20165110
Exp5 MSF基础应用 20165110 一.实践要求(3.5分) 实践目标是掌握metasploit的基本应用方式,重点常用的三种攻击方式的思路.具体需要完成: 1.一个主动攻击实践;(1分) m ...
- appium 测试过程中遇到的几个问题 ---持续更新!
一. appium自带的Chromedriver版本和设备Android System Webview版本不一致的问题 报错信息: io.appium.java_client.NoSuchContex ...
- django filter or 多条件查询
功能:django中实现多条件查询 或关系: from django.db.models import Q return qs.filter(Q(notice_to_group__contains=' ...
- HTTP协议转码
为什么要有转义的功能? 一些特殊字符需要转义,才能被访问,否则变为空格 UrlEnCode与UrlDeCode 有些符号在URL中是不能直接传递的,如果要在URL中传递这些特殊符号,那么就要使用他们的 ...
- java实现单例模式
1.饿汉模式 public class Singleton{ private static Singleton instance = new Singleton(); private Singleto ...
- NoteBook学习(一)-------- Zeppelin VS Jupyter
notebook1.mdhtml, body {overflow-x: initial !important;}html { font-size: 14px; color: rgb(51, 51, 5 ...
- MVC开发T4代码生成之一----文本模板基础
T4文本模板 T4全写为Text Template Transformation Toolkit,是一种编程辅助工具,用来使程序代码自(懒)动(猿)生(福)成(利)的工具.MVC开发中大量使用了T4模 ...
- 手工脱壳之FSG压缩壳-IAT表修复
目录 一.工具及壳介绍 二.脱壳 2.1.单步跟踪脱壳 2.2.IAT修复 三.程序脱壳后运行截图 四.个人总结 五.附件 一.工具及壳介绍 使用工具:Ollydbg.PEID.ImportREC.L ...
- c++常用小算法
这篇文章列出了一些简单常用的C++容器算法,C++标准库中事实上提供了很多的算法并且有详细的介绍.如果需要详细的了解这些算法可以 参考C++在线参考手册 algrithm . 1 排序 在 #incl ...
- mac 删除文件不经过废纸篓解决办法
mac 删除文件不经过废纸篓,提示“此项目将被立刻删除,您不能撤销此操作.”,解决办法. 终端机运行两个命令: rm -R ~/.Trash killall Finder 退出终端机. ------- ...