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)的更多相关文章

  1. Asp.net Security框架(2)

    Asp.net 的Security框架除了提供Cookies,OAuth,ActiveDirectory等多个用户认证实现,基本上已经满足业务项目的开发需要了. 当需要实现OAuth2.0服务器端实现 ...

  2. ASP.NET Core 框架源码地址

    ASP.NET Core 框架源码地址 https://github.com/dotnet/corefx 这个是.net core的 开源项目地址 https://github.com/aspnet  ...

  3. 从零开始实现asp.net MVC4框架网站的用户登录以及权限验证模块 详细教程

    从零开始实现asp.net MVC4框架网站的用户登录以及权限验证模块 详细教程   用户登录与权限验证是网站不可缺少的一部分功能,asp.net MVC4框架内置了用于实现该功能的类库,只需要简单搭 ...

  4. 探索ASP.NET MVC框架之路由系统

    引言 对于ASP.NET MVC的路由系统相信大家肯定不陌生.今天我们就深入ASP.NET的框架内部来看一下路由系统到底是怎么通过我们给出的地址(例如:/Home/Index)解析出Controlle ...

  5. Asp.net MVC5 框架揭秘 S412 实例解析 – 绝妙的扩展 模式的胜利

    Asp.net MVC5 框架是个 开源的,处处可扩展的框架. 蒋先生 在他的这本书里 对如何理解框架,如何扩展框架, 给出了大量的说明和实例. 先上效果图 大部分做传统BS 的同学看到这个页面,脑海 ...

  6. 写自己的ASP.NET MVC框架(上)

    http://www.cnblogs.com/fish-li/archive/2012/02/12/2348395.html 阅读目录 开始 ASP.NET程序的几种开发方式 介绍我的MVC框架 我的 ...

  7. 学习“迷你ASP.NET MVC框架”后的小结

    看蒋老师MVC的书第二个大收获可以是算是看了这个迷你ASP.NET MVC框架了,虽然它远不如真正ASP.NET MVC(下文简称“MVC”)那么复杂庞大,但在迷你版中绕来绕去也够呛的.这部分我看了几 ...

  8. 如何用asp.net MVC框架、highChart库从sql server数据库获取数据动态生成柱状图

    如何用asp.net MVC框架.highChart库从sql server数据库获取数据动态生成柱状图?效果大概是这样的,如图: 请问大侠这个这么实现呢?

  9. BrnShop开源网上商城第二讲:ASP.NET MVC框架

    在团队设计BrnShop的web项目之初,我们碰到了两个问题,第一个是数据的复用和传递,第二个是大mvc框架和小mvc框架的选择.下面我依次来说明下. 首先是数据的复用和传递:对于BrnShop的每一 ...

随机推荐

  1. lambda练习题

    3.用map来处理字符串列表,把列表中所有人都变成sb,比方alex_sb name=['alex','wupeiqi','yuanhao','nezha'] # def func(item): # ...

  2. spring boot1.0 集成quartz 动态配置定时任务

    转载自 https://www.imooc.com/article/36278 一.Quartz简介了解 Quartz Quartz 是一个完全由 Java 编写的开源作业调度框架,为在 Java 应 ...

  3. 有关ajax的理解;

    jQuery是JavaScript封装的一个库,里面封装了一些便于我们使用的方法,同时还有$.ajax()的一些理解需要我们更加深入了解 ajax简介: 实现后台与前台交互的功能或方法就叫做ajax: ...

  4. css fixed 失效问题解法

    https://stackoverflow.com/questions/11258877/fixed-element-disappears-in-chrome 开启css硬件加速,transform: ...

  5. CSS碎片

    1.外边距不会应用到行内非替换元素的顶端和底端,因为不会改变它的行高,所有没有视觉效果. 而行内非替换元素上下内边距虽然也不改变行高,但却能延伸背景,所有背景可见,可能会重叠其他行. span{mar ...

  6. java分布式电子商务云平台b2b b2c o2o需要准备哪些技术??

    技术解决方案 开发语言: java.j2ee 数据库:mysql JDK支持版本: JDK1.6.JDK1.7.JDK1.8版本 核心技术:分布式.云服务.微服务.服务编排等. 核心架构: 使用Spr ...

  7. Jenkins构建maven项目跳过测试用例的命令

    在Jenkins构建项目的时候,有时候执行大量的单元测试用例需要浪费很多时间,又或者测试环境与其他dubbo,zookeeper服务器环境不通执行失败, 为了更快速的构建,可在build选项中使用如下 ...

  8. 洛谷P1386座位安排

    座位安排 今天,在机房里做了这道题目,我来整理一下思路. 首先读懂题意,这n个人是不需要按1到n来一次安排的,也就是说你可以先安排任意一个人. 那么有一种很好排除的情况,那就是对于大于等于i的作为的需 ...

  9. P1081 开车旅行(Not Finish)

    https://www.luogu.org/problemnew/show/P1081

  10. WindowsPE权威指南 第二章 小工具 pedump代码的C语言实现

    2016-11-16 16:29:07 主程序代码 pedump.c #include <windows.h> #include <Richedit.h> #include & ...