手写AspNetCore 认证授权代码

在普通的MVC项目中 我们普遍的使用Cookie来作为认证授权方式,使用简单。登录成功后将用户信息写入Cookie;但当我们做WebApi的时候显然Cookie这种方式就有点不适用了。

在dotnet core 中 WebApi中目前比较流行的认证授权方式是Jwt  (Json Web Token) 技术。Jwt 是一种无状态的分布式身份验证方式,Jwt 是将用户登录信息加密后存放到返回的Token中 ,相当于用户信息是存储在客户端。Jwt的加密方式有两种 :对称加密与非对称加密,非对称加密即 RSA 加密的方式。

自己手写认证授权代码和Jwt的思路是一样的;不同之处在于:

1、加密方式仅仅是采用的对称加密方式 简单高效。哈哈!(弊端就是没有非对称加密更安全);

2、用户登录信息主要保存在Redis中,即服务端。

自己写的好处:

1、扩展性强,可根据自己的需要进行各种扩展,比如在验证授权时可很方便的添加多设备登录挤下线功能等。

2、可随时调整用户的Token失效时间。

认证及授权流程

1、先请求登录接口,登录成功,为用户产生一个Token,

登录获取Token 图片中ticket字段。

640?wx_fmt=jpeg

 

2、 客户端拿到Token在其他请求中将Token信息添加到请求头中传递到服务端。

640?wx_fmt=png

开发思路

1、添加一个过滤器。在Startup 中ConfigureServices方法里添加一个Filters 即我们自己授权代码类。

640?wx_fmt=png

添加过滤器之后我们的每次请求都会优先执行过滤器的代码。在这里我们就可以判断用户是否已经登录,从而进行拦截没有授权的的请求。

640?wx_fmt=png

2、登录并获取Token

由于添加了IAuthorizationFilter类型的过滤器,所以每个请求都会被拦截。所以登录接口我们需要允许匿名访问。

640?wx_fmt=png

3、加解密Token

加密:登录成功后就要产生个Token了,产生也简单。将用户的唯一信息比如uid或者guid进行对称式加密。当然如果需要对登录设备做区分或者多设备登录挤下线功能时最好也将登录设备一起加密进去。

我们都知道 在加密中一般情况下只要加密的数据及加密key不变;那么加密后的内容也会一直保持不变。如果我们每次登录产生的Token一直没有任何变化只要这个Token被泄露了那将很危险的。竟然我们希望每次登录产生的Token都有变化。那就要改变加密数据或者加密key了。加密数据是用户唯一信息这个显然不可能产生变化。所以我们能改变的地方只能是加密key了;我们采用固定key+随机key的方式。

因为加密key在我们解密时也是需要一一对应的。所以我们得想办法将我们的随机key告诉我们解密的代码中。办法就是 我们将加密后的内容(一般情况进行base64编码)再加上随机key。(随机key一定是固定长度 不然后面无法解析拆分)

比如加密内容是guid=73e01eab-210d-4d19-a72a-d0d64e053ec0+client=ios  固定key=123654+随机key=FEZaaWbyimaWiJHah 

即加密过程:

加密(73e01eab-210d-4d19-a72a-d0d64e053ec0&ios,123654FEZaaWbyimaWiJHah)=M0EzM0ZGRjk2QzgwRDY2RDJDMTdFOEJGRUE0NDI3NEE1RDlFNkU4NDQ0MERFNEIyMkQ5QjM4MjAxODcwj加随机keyFEZaaWbyimaWiJHah

所以我们返回给用户的Token实际上是包含了随机key的。当然这个随机key只有我们自己知道。因为随机key的长度以及位置只有我们自己知道。这种方式即使我们固定key被泄露了 只要别人不知道我们随机key处理方法也无济于事。

解密:知道加密过程后就好解密了。拿到用户提交的Token后首先按照随机key的固定位置进行截取。将加密内容和随机key拆开。然后将固定key和随机key组合一起解密加密的内容,取得用户guid和登录的客户端类型。

完整加解密代码

代码中的ticket代表本文中的Token。代码中使用的是DES加解密

640?wx_fmt=png

完整demo代码请看github

https://github.com/cfan1236/NetCoreAuthorize

原文地址:https://www.cnblogs.com/rui1236/p/10226063.html


.NET社区新闻,深度好文,欢迎访问公众号文章汇总 http://www.csharpkit.com

640?wx_fmt=jpeg


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/317990.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

YBTOJ:采矿战略(线段树维护dp、树链剖分)

文章目录题目描述解析代码题目描述 所谓线段树维护dp,就是在线段树上维护dp (逃) 解析 把树剖一下后就变成了区间问题 考虑建一棵线段树,每一个结点都是一个背包 这样就能区间查询,也能带修了 这种做法复杂度其实并不…

【用皇宫三十六计生存法则带你走进LCT(动态树)】LCT概念+模板+例题【洛谷P3690 Link Cut Tree(动态树)】

文章目录LCT概念模板rotatoisrootsplayaccessmakerootsplitfindrootlinkcut封装版例题题目code普通版code封装版这篇博客主要是帮助大家理解各个模板及LCTLCTLCT的意思,方便理解,模板写法的理解在代码里有注释详解,如果要看原理的话&#xff…

迈向现代化的 .Net 配置指北

1. 欢呼 .NET Standard 时代我现在已不大提 .Net Core,对于我来说,未来的开发将是基于 .NET Standard,不仅仅是 面向未来 ,也是 面向过去;不只是 .Net Core 可以享受便利, .NET Framework 不升级一样能享受…

YBTOJ洛谷P2042:维护数列(平衡树)

文章目录题目描述解析删除区间插入数列修改&翻转区间和&最大子段和代码传送门题目描述 解析 阴间题… 这不是裸的板子吗? 国赛真的有人能把这题写出来吗… 应该算一道练习作用很强的题了 写完这题,各种平衡树维护区间操作的方法可以说是毕业了吧…

CAP 2.4版本发布,支持版本隔离特性

前言自从上次 CAP 2.3 版本发布 以来,已经过去了几个月的时间,这几个月比较忙,所以也没有怎么写博客,趁着2019年到来之际(现在应该是2019年开始的时候),CAP也发布了2018年的最后一个大版本 2.4&…

【周末狂欢赛7】【NOIP模拟赛】七夕祭,齿轮(dfs),天才黑客

文章目录T1题目题解codeT2题目题解codeT3题目题解codeT1 题目 七夕节因牛郎织女的传说而被扣上了「情人节」的帽子。于是TYVJ今年举办了一次线下七夕祭。Vani同学今年成功邀请到了cl同学陪他来共度七夕,于是他们决定去TYVJ七夕祭游玩。 TYVJ七夕祭和11区的夏祭的…

.NET Core 如何为项目提供高性能解决方案?

本系列,我们将探讨.NET Core 的一些好处,以及它如何为市场提供高性能解决方案,为传统.NET 开发人员和技术人员提供帮助。正文前言随着.NET Core 2.0 在 2016 年首次发布,微软拥有了这个通用、模块化、跨平台开源项目的下一个主要版…

[2.9训练]【CF909C】Python Indentation,【CF909D】Colorful Points,【CF909E】Coprocessor

文章目录T1:Python Indentation题目题解codeT2:Colorful Points题目题解codeT3:Coprocessor题目题解codeT1:Python Indentation 题目 题目描述 In Python, code blocks don’t have explicit begin/end or curly braces to mark…

Docker最全教程之使用Tencent Hub来完成CI(十)

本周更新两篇,保证不太监!在本系列教程中,笔者希望将必要的知识点围绕理论、流程(工作流程)、方法、实践来进行讲解,而不是单纯的为讲解知识点而进行讲解。也就是说,笔者希望能够让大家将理论、…

[2.7]【CF933A】A Twisty Movement【CF926B】Add Points【CF917A】The Monster【CF919E】Congruence Equation

文章目录T1:A Twisty Movement题目题解codeT2:Add Points题目题解codeT3:The Monster题目题解codeT4:Congruence Equation题目题解codeT1:A Twisty Movement 题目 题目 题解 因为aia_iai​1/21/21/2,于…

LIS最长上升子序列

LIS算是比较经典的问题&#xff0c;常用的是O(n^2)的方法 for(int i1;i<n;i){dp[i]1;for(int j1;j<i;j){if(a[j]<a[i])dp[i]max(dp[i],dp[j]1);}mxmax(mx,dp[i]);}我们这里优化成O(nlogn) 我们模拟一个栈stack&#xff0c;每读入一个数&#xff0c;如果这个数大于栈顶…

EF Core 数据库 Provider 一览

当 EF Core 1.x 系列和 2.0 版本之间经过重大的重写时&#xff0c;所有 EF Core 数据库 Provider 都受到重创。从那时起&#xff0c;各种私人和商业开发团队一直在努力填补这个空白。正文当 EF Core 1.x 系列和 2.0 版本之间经过重大的重写时&#xff0c;所有 EF Core 数据库 P…

[3.3训练赛]One-Dimensional(矩阵快速幂),Freda的迷宫(无向图强连通分量+并查集),一道防AK好题

文章目录T1:One-DimensionaltitlesolutioncodeT2:【NOIP模拟赛】Freda的迷宫titlesolutioncodeT3:【NOIP模拟赛】一道防AK好题titlesolutioncode确实没想到自己写文章能隔这么久&#xff0c;鸽王预警 T1:One-Dimensional title 考虑一个含有 N 个细胞的一维细胞自动机。细胞…

牛客网专题 概率dp

文章目录概念&#xff1a;例题引入&#xff1a;解答&#xff1a;Happy Running NC15532题意&#xff1a;题解&#xff1a;代码&#xff1a;poj2096 NC106693 Collecting Bugs题意&#xff1a;题解&#xff1a;代码&#xff1a;NC210477 带富翁题意&#xff1a;题解&#xff1a;…

.NET Core 3.0 特性初探:C# 8、WPF、Windows Forms、EF Core

.NET Core 的下一个主要版本最近进入了预览阶段&#xff0c;.NET Core 3.0 将支持使用 Windows Presentation Foundation &#xff08;WPF&#xff09;、Windows Forms&#xff08;WinForms&#xff09;、Entity Framework &#xff08;EF&#xff09;、Blazor、 C# 8 和.NET S…

YBTOJ洛谷P4074:糖果公园(树上莫队)

文章目录解析update:代码所谓树上莫队&#xff0c;就是在树上的莫队 &#xff08;逃&#xff09; 传送门 解析 似乎就是树上的这道题 考虑如何转化为序列问题呢? 考虑dfs序 但是又一个问题。。。 似乎这条链的dfs序不连续啊 树剖一下就好啦 考虑更阳间的方法 求出这棵树的欧…

【用梨泰院class中的财阀世家带你洞悉替罪羊树】Scapegoat Tree原理,模板,例题

我想写在前面&#xff0c;本文财阀世家全是虚构&#xff0c;没有诋毁之意&#xff0c;如有雷同&#xff0c;纯属巧合 红色预警&#xff01;&#xff01;&#xff01;红色预警 文章目录Scapegoat Tree概念模板变量声明Bad函数判断是否需要重构理解模板rebuild重构理解模板inser…

领域驱动设计,让程序员心中有码(五)

1 从搬砖谈领域对象有一个古老的故事&#xff0c;大概是这样的。作者问三个建筑工地上的工人他们在干什么&#xff1f;有一个没精打采的说&#xff0c;我在挖洞&#xff01;而另一一个人却说&#xff0c;我在盖一座房子。还有一个人说&#xff0c;我在建立一座巨大的城市。…

.NET Core实战项目之CMS 第十四章 开发篇-防止跨站请求伪造(XSRF/CSRF)攻击处理...

通过 ASP.NET Core&#xff0c;开发者可轻松配置和管理其应用的安全性。 ASP.NET Core 中包含管理身份验证、授权、数据保护、SSL 强制、应用机密、请求防伪保护及 CORS 管理等等安全方面的处理。 通过这些安全功能&#xff0c;可以生成安全可靠的 ASP.NET Core 应用。而我们这…

模板:左偏树

文章目录解析可以解决的问题定义&#xff1a;左偏树的基本性质基本结论操作合并访问与删除堆顶元素插入元素批量插入删除已知元素所谓左偏树&#xff0c;就是往左偏的树 下面介绍一下它的一个兄弟&#xff1a; 《右偏树》 &#xff08;逃&#xff09; 解析 所谓左偏树&#…