.Net Core 认证系统之Cookie认证源码解析

接着上文.Net Core 认证系统源码解析,Cookie认证算是常用的认证模式,但是目前主流都是前后端分离,有点鸡肋但是,不考虑移动端的站点或者纯管理后台网站可以使用这种认证方式.注意:基于浏览器且不是前后端分离的架构(页面端具有服务端处理能力).移动端就不要考虑了,太麻烦.支持前后端分离前给移动端提供认证Api的一般采用JwtBearer认证,可以和IdentityServer4的password模式结合.很适用,但是id4的password模式各客户端必须绝对信任,因为要暴露用户名密码.适合做企业级下所有产品的认证.不支持除企业外的第三方调用.当然id4提供了其他模式.这是题外话.但是场景得介绍清楚.以免误导大家!

1、Cookie认证流程

引入核心认证组件之后,通过扩展的方式引入Cookie认证,微软采用链式编程,很优雅.Net Core的一大特点.

注入Cookie认证方案,指定Cookie认证参数,并指定Cookie认证处理器,先不介绍参数,看看处理器干了什么.

Cookie的核心认证方法,第一步如下:

一些必须的防重复执行操作,没截图,也不介绍了,安全工作,只贴核心代码.第一步,就是去读取客户端存在的cookie信息.

微软在Cookie认证参数中提供了接口,意味者你可以自定义读取Cookie内容的实现,他会把上下文和Cookie的名称传给你,这样就能定制获取Cookie内容的实现.接着解密Cookie内容

微软注入了Core的核心加密组件,大家自行百度,key也可以通过Cookie认证参数配置,如果你不指定,却采用微软默认的实现.所以客户端的cookie内容一般都以加密内容显示.

接着

拿到seesionId的cliam,关于claim不多说,自行百度.core新的身份模型.必须了解的内容.

cookie认证参数中你可以配置SessionStore,意味者你的session可以进行持久化管理,数据库还是redis还是分布式环境自行选择.应用场景是cookie过长,客户端无法存储,那么就可以通过配置这个SessionStore来实现.即分布式会话.微软也提供了扩展.

接着,cookie过期检测.

接着

上面的代码意味着cookie可以自动刷新.通过以下两个参数

如果读取到的客户端的cookie支持过期刷新,那么重新写入到客户端.

ok,如果没有在客户端读取到cookie内容,意味者cookie被清除,或者用户是第一次登陆,直接返回认证失败,如果成功,执行认证cookie校验认证上下文的方法

Events可以在AuthenticationSchemeOptions参数中配置

但是Cookie认证参数提供了默认实现

意味者你可以在注入Cookie认证服务的时候,自定义验证cookie结果的验证实现.

通过CookieAuthenticationOptions的Events属性进行注入.验证完毕,

判断上下文中的ShouldRenew参数,这个你可以根据业务需要执行刷新cookie的实现,最后返回认证结果.

整个流程到这里结束.

2、应用

因为登陆页面不能进行认证,所以必须加一个中间件放行登陆页面,代码如下:

public static IApplicationBuilder UseAuthorize(this IApplicationBuilder app)
        {
            return app.Use(async (context, next) =>
            {
                if (context.Request.Path == "/Account/Login")
                {
                    await next();
                }
                else
                {
                    var user = context.User;
                    if (user?.Identity?.IsAuthenticated ?? false)
                    {
                        await next();
                    }
                    else
                    {
                        await context.ChallengeAsync();
                    }
                }
            });
        }

接着将中间件注入

接着构建登陆页面和首页,直接网上找了,代码如下:

原文地址:https://www.cnblogs.com/GreenLeaves/p/12093972.html

时间: 2024-10-10 05:31:44

.Net Core 认证系统之Cookie认证源码解析的相关文章

.Net Core 认证系统之基于Identity Server4 Token的JwtToken认证源码解析

介绍JwtToken认证之前,必须要掌握.Net Core认证系统的核心原理,如果你还不了解,请参考.Net Core 认证组件源码解析,且必须对jwt有基本的了解,如果不知道,请百度.最重要的是你还需要掌握identity server4的基本用法,关于identity server4因为设计到两个协议Oath2.0和openid connect协议,内容较多,不是本文重点,后续有时间我会写一片关于identity server4的源码分析.且为了保证整个系统的高度可控,我重写了整个id4,留

NET Core 2.0使用Cookie认证实现SSO单点登录

NET Core 2.0使用Cookie认证实现SSO单点登录 之前写了一个使用ASP.NET MVC实现SSO登录的Demo,https://github.com/bidianqing/SSO.Sample,这个Demo是基于.NET Framework,.NET Core 2.0出来了试着使用ASP.NET Core尝试一下.假如我们有三个站点 domain.dev order.domain.dev passport.domain.dev domain.dev作为我们的主站肯定是可以匿名访问

rest_framework-00-规范-APIview源码解析-认证

rest_framework-00-规范-APIview源码解析-认证 规范 支付宝: 接口开发 订单api----order 方式1:缺点:如果有10张表,则需要40个url. urls.py views.py 缺点:如果有10张表,则需要40个url.    接下来就出现了resrful 规范,比较简洁 方式2:resrful 规范(建议)  url简洁了,只有一条. 1. 根据method不同做不同的操作,示例:基于FBV: urls.py views.py 2. 根据method不同做不

专业定制下载系统网站/下载网站源码,资源下载网站源码

10年的技术团队专业定制下载系统网站/下载网站源码,资源下载网站平台定制 该下载系统由绿茶科技团队自主开发,系统采用了国内比较主流的thinkPHP框架实现的,数据库用MySQL.是一套致力于软件应用,工具游戏,视频小说,教程资讯等通用资源下载的下载系统整站源码.模版设计整洁.清爽,广告位布局合理.会员积分体系完善,支持用户上传分享免费.收费资源. 下载收益支持用户提现. 分享有收益,刺激用户上传扩充网站资源,实现商家与平台联和共盈. PC版: 手机版: 服务器选择:  服务器购买地址:http

Jquery.cookie.js 源码和使用方法

jquery.cookie.js源码和使用方法 jQuery操作cookie的插件,大概的使用方法如下 $.cookie(‘the_cookie’); //读取Cookie值$.cookie(’the_cookie’, ‘the_value’); //设置cookie的值$.cookie(’the_cookie’, ‘the_value’, {expires: 7, path: ‘/’, domain: ‘jquery.com’, secure: true});//新建一个cookie 包括有效

外卖人订餐系统定制建设开发,送外卖订餐系统商业运营版源码

外卖人订餐系统定制开发,外卖人订餐系统商业运营版源码,本人承接搭建,安装,二次开发. 最新外卖人订餐系统8.5运营版源码,支持 PC+WAP+微信订餐开源运营版可二次开发与功能修改. 安装说明: 服务器空间必须支持PHP + MySQL + 伪静态 1.源码包完整上传至服务器空间,并解压 2.将根目录下的 data.sql 导入到你的 MySQL 数据库. 3.修改 config/hopeconfig.php 里面的数据库信息为自己的数据库名称.账号.密码. 4.后台登录地址 :域名/index

Caffe2源码解析之core

写在前面 在对Tensorflow的后端源码进行了拆解(参见tensorflow源码解析系列文章索引)之后,很想跟其它深度学习框架的实现进行对比,根据框架的流行程度,先选择了Pytorch.Pytorch的后端核心是直接复用了Caffe2,因此本文针对Caffe2源码的core模块进行了简单拆解. 目录 数据存储与表示 storage tensor blob qtensor 操作 observer observable operator 操作求导 operator_schema context

.NET Core实战项目之CMS 第三章 入门篇-源码解析配置文件及依赖注入

作者:依乐祝 原文链接:https://www.cnblogs.com/yilezhu/p/9998021.html 写在前面 上篇文章我给大家讲解了ASP.NET Core的概念及为什么使用它,接着带着你一步一步的配置了.NET Core的开发环境并创建了一个ASP.NET Core的mvc项目,同时又通过一个实战教你如何在页面显示一个Content的列表.不知道你有没有跟着敲下代码,千万不要做眼高手低的人哦.这篇文章我们就会设计一些复杂的概念了,因为要对ASP.NET Core的启动及运行原

Qt元对象系统源码解析

Qt元对象系统源码解析 https://blog.51cto.com/9291927/2070348 一.Qt元对象系统简介 1.元对象系统简介 Qt 的信号槽和属性系统基于在运行时进行内省的能力,所谓内省是指面向对象语言的一种在运行期间查询对象信息的能力, 比如如果语言具有运行期间检查对象型别的能力,那么是型别内省(type intropection)的,型别内省可以用来实施多态.C++的内省比较有限,仅支持型别内省, C++的型别内省是通过运行时类型识别(RTTI)(Run-Time Typ