aspnet core 2.1中使用jwt从原理到精通一

原理

jwt对所有语言都是通用的,只要知道秘钥,另一一种语言有可以对jwt的有效性进行判断;

jwt的组成;Header部分Base64转化.Payload部分Base64转化.使用HS256方式根据秘钥对前面两部分进行加密后再Base64转化,其中使用的hs256加密是header部分指定的,也可以通过官网的查看,如下图:

640?wx_fmt=png

原理就这么简单,那究竟用怎样使用C#来实现呢,又怎么确定它的正确性呢?,请继续

使用C#实现

我们定义一个今天方法,其中需要使用到Microsoft.IdentityModel.Tokens.dll,asp.net core 2.1再带,如果其他版本,没有自带,需要nuget 一下这个类库

640?wx_fmt=png

该方法很简单,只需要传入header键值对和payLoad键值对,然后根据原理进行Base64转换和hs256加密,接下来我们来使用一个测试类对其进行测试,代码如下:

640?wx_fmt=png

先不管后面的验证,我们先看看其中生成的encodeJwt的值:eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJyb2JlciIsImp0aSI6IjY0OWMyYjUxLTE4ZGQtNDEzYy05Yzc5LTI4NWNhMDAxODU2NSIsIm5iZiI6MTU0MDYxMDY2NSwiZXhwIjoxNTQwNjEyNDY1LCJpc3MiOiJyb2Jlcklzc3VlciIsImF1ZCI6InJvYmVyQXVkaWVuY2UiLCJhZ2UiOjMwfQ.7Is2KYHAtSr5fW2gPU1jGeHPzz2ULCZJGcWb40LSYyw

640?wx_fmt=png

第一部分和第二部分,并不是加密,只是Base64转换,我们可以通过其他语言轻松转换回来,如下使用javascript进行转,window.atob(base64加密) window.btoa(base64解密)

 var header=JSON.parse(window.atob('eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9'))

如下图:

640?wx_fmt=png

我再对payLoa进行转换回来, var payLoad=JSON.parse(window.atob('eyJzdWIiOiJyb2JlciIsImp0aSI6IjY0OWMyYjUxLTE4ZGQtNDEzYy05Yzc5LTI4NWNhMDAxODU2NSIsIm5iZiI6MTU0MDYxMDY2NSwiZXhwIjoxNTQwNjEyNDY1LCJpc3MiOiJyb2Jlcklzc3VlciIsImF1ZCI6InJvYmVyQXVkaWVuY2UiLCJhZ2UiOjMwfQ'))  ,如下图:

640?wx_fmt=jpeg

所以,从这里可以看出来,Base64并不是属于加密,只是简单转换,因此,不能在payLoad中存放重要内容,比如密码等

 

使用aspnetcore 中自带的类生成jwt

aspnet core中自带了一个jwt帮助类,其实原理一样,对上面做了封装,丰富了一个内容,我们继续使用一个静态方法,如下

640?wx_fmt=png

它效果和上面一模一样,如果使用同样的header 、payload、秘钥,生成的jwt肯定一样,这里就不演示了,感兴趣的可以自行尝试;

aspnetcore中如何使用自定义jwt验证

上面讲了那么多,只是为了大家更好的理解如何使用jwt进行验证,那是jwt是如何进行验证的呢?,如果一个http请求过来,一般jwt携带在http请求头部的Authorization中;先不看如何获取,先看看他是如何验证的,我们再定义个静态方法,如下:

640?wx_fmt=png

其中 validatePayLoad 参数是一个自定义的验证的Fun,执行该Fun方法时会把解密后的payload作为参数传入进去

我们验证通过分为两部分,

  1. 第一,必须的(自认为的)

    1.  jwt签名是否正确,请看以上代码实现

    2.  jwt是否在可以时间内,请看以上代码实现

  2. 第二,自定义的(各复杂的,原理就是获取payLoad 的某个值,然后对这个值进行各种判读--等于,大于,包含,)

    1.   该jwt是不是进入黑名单

    2.  aud==‘roberAudience’

我们来通过一个测试类验证

640?wx_fmt=png

如上面,我们可以把jwt中的payload解析出来,然后进行各种复杂的想要的验证;

其实,aspnet core中的基于角色,用户、策略,自定义策略的验证就相当这里的自定义验证,一下章将详细说明和对比,这里暂时不讲解

看完上面,是不是觉得jwt很简单就,主要就两部

  1. 创建jwt;

  2. 验证jwt;

以上就是jwt的基本内容,它确实很简单,不要被aspnet core中的各种写法给搞晕了,只要是jwt相关的验证都是基于上面这些东西

下一章节将讲述:

  1. 在aspnet core中,自定义jwt管道验证;

  2. 在aspnet core中,自定义策略验证CommonAuthorizeHandler : AuthorizationHandler<CommonAuthorize>

  3. 自定义jwt逻辑验证和原生的角色,用户,策略,等进行对比


原文地址: https://www.cnblogs.com/lechengbo/p/9860711.html


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

640?wx_fmt=jpeg

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

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

相关文章

2020牛客国庆集训派对day3 Points

Points 题目描述 Jack and Rose are playing games after working out so many difficult problems. They together drew a “Haizi” tree to show their collaboration. “Haizi” tree is the same as the tree defined in graph theory. Now Jack would like to count t…

CF1137F-Matches Are Not a Child‘s Play【LCT】

正题 题目链接:https://www.luogu.com.cn/problem/CF1137F 题目大意 给出nnn个点的一棵树&#xff0c;第iii个点权值为iii。 一棵树的删除序列定义为每次删除编号最小的叶子并将其加入序列末尾。 要求支持 修改一个点的权值为一个比目前所有权值都要大的一个值询问一个点在…

【数论】数表(P3312)

正题 P3312 题目大意 给出n,m,a&#xff0c;求∑i1n∑j1mσ(gcd(i,j))[σ(gcd(i,j))≤a]\sum_{i1}^n\sum_{j1}^m\sigma(gcd(i,j))[\sigma(gcd(i,j))\leq a]i1∑n​j1∑m​σ(gcd(i,j))[σ(gcd(i,j))≤a] 解题思路 先不考虑a的条件限制 ∑i1n∑j1mσ(gcd(i,j))\sum_{i1}^n\su…

codeforces1452 E. Two Editorials

E. Two Editorials 官方题解 首先将每个参赛者按照区间中点排序&#xff0c;那么前一段参赛者听第一个人&#xff0c;而后一段听第二个人的。 预处理数组su[j]表示j→mj\to mj→m这些参赛者能被“覆盖”最多“贡献” 只需要枚举第一个人演讲的区间&#xff0c;再考虑前多少参赛…

.NET Core微服务之路:利用DotNetty实现一个简单的通信过程

上一篇我们已经全面的介绍过《基于gRPC服务发现与服务治理的方案》&#xff0c;我们先复习一下RPC的调用过程&#xff08;笔者会在这一节的几篇文章中反复的强调这个过程调用方案&#xff09;&#xff0c;看下图根据上面图&#xff0c;服务化原理可以分为3步&#xff1a;服务端…

codeforces1451 C. String Equality

真的弱&#xff0c;这题都想蹦了。 这场md&#xff0c;b题看错题调了1小时才发现&#xff0c;c题上来也看错。。最后懒得写了睡觉~ C. String Equality 神的讲解 注意到连续k个相同字符才能使用操作二&#xff0c;不过我们可以交换&#xff0c;由此不难知道是否能够交换之和出…

YbtOJ#732-斐波那契【特征方程,LCT】

正题 题目链接:http://www.ybtoj.com.cn/contest/125/problem/2 题目大意 给出nnn个点的一棵树&#xff0c;以111为根&#xff0c;每个点有点权aia_iai​。要求支持mmm次操作 修改一个修改一个节点的父节点修改一条路径的权值为www给出uuu询问Fbi(au)Fbi(a_u)Fbi(au​)给出u…

2020牛客国庆集训派对day3 Leftbest

Leftbest 链接&#xff1a;https://ac.nowcoder.com/acm/contest/7830/A 来源&#xff1a;牛客网 题目描述 Jack is worried about being single for his whole life, so he begins to use a famous dating app. In this app, the user is shown single men/women’s photos …

【笛卡尔树】【树状数组】Beautiful Pair(P4755)

正题 P4755 题目大意 给你n个数&#xff0c;问你有多少对二元组 (i,j)(i,j)(i,j) 满足 i≤ji\leq ji≤j 且 aiaj≤maxiijaia_i\times a_j\leq max_{ii}^ja_iai​aj​≤maxiij​ai​ 解题思路 考虑对原数组构建笛卡尔树&#xff0c;树中左右子树之间的二元组所取得的max就是当…

[译]ASP.NET Core中使用MediatR实现命令和中介者模式

在本文中&#xff0c;我将解释命令模式&#xff0c;以及如何利用基于命令模式的第三方库来实现它们&#xff0c;以及如何在ASP.NET Core中使用它来解决我们的问题并使代码简洁。因此&#xff0c;我们将通过下面的主题来进行相关的讲解。什么是命令模式?命令模式的简单实例以及…

【贪心】数据备份(P6320)

正题 P6320 题目大意 有n个点&#xff0c;相邻的点不能同时选&#xff0c;问你选k个的最小代价 解题思路 考虑贪心取每个点&#xff0c;取了一个点后设置一个撤回点&#xff0c;就是把该点的选择取反&#xff0c;同时选择左右&#xff0c;这样直接用堆维护即可 code #inclu…

codeforces1451 D. Circle Game

D. Circle Game 看到博弈题&#xff0c;直接打表不过并不能发现什么规律gg 后手每次按照先手对称进行移动&#xff0c;如果先手向右则向上&#xff0c;先手向上则向右&#xff0c;然后考虑最后一步即可。 对称技巧&#xff01;&#xff01;&#xff01; #define IO ios::syn…

2020-10-03

Flowers 题目描述 Recently Jack becomes much more romantic. He would like to prepare several bunches of flowers. Each bunch of flowers must have exactly M flowers. As Jack does not want to be boring, he hopes that flowers in the same bunch are all differ…

P4770-[NOI2018]你的名字【SAM,线段树合并】

正题 题目链接:https://www.luogu.com.cn/problem/P4770 题目大意 给出一个长度为nnn的字符串SSS。qqq次询问给出一个串TTT和一个区间[L,R][L,R][L,R]&#xff0c;求TTT有多少个本质不同的子串不是SL∼RS_{L\sim R}SL∼R​的子串。 1≤n≤5105,1≤Q≤105,∑∣T∣≤1061\leq n…

.NET in Browser - Blazor

什么是BlazorBlazor 是一个实验性的. NET web 框架, 使用 C# 和 HTML 在任何浏览器中不需要插件即可运行 WebAssembly 程序集。什么是WebAssemblyWebAssembly是一种新的适合于编译到Web的&#xff0c;可移植的&#xff0c;大小和加载时间高效的格式&#xff0c;是一种新的字节码…

【数论】【杜教筛】选数(P3172)

正题 P3172 题目大意 在 [L,R] 选n个数&#xff0c;问gcdk的方案数 解题思路 因为gcdk&#xff0c;那么所选的数都是k的倍数&#xff0c;那么可以让L,R整除k&#xff0c;那么有 ∑a1LR∑a2LR...∑anLR[gcd(a1,a2...an)1]\sum_{a_1L}^R\sum_{a_2L}^R...\sum_{a_nL}^R[gcd(a_1…

【模板】吉老师线段树

ACM模板 目录区间取最值区间取最值 Gorgeous Sequence 区间最值操作往往采用以下办法 线段树维护&#xff1a; 区间最大值mx\text{mx}mx区间严格次大值smx\text {smx}smx区间和sum\text{sum}sum区间最大值个数cnt\text{cnt}cnt区间最值懒标记lazy\text{lazy}lazy 实现区间…

2020牛客国庆集训派对day4 Digits Are Not Just Characters

Digits Are Not Just Characters 题意&#xff1a; 比较大小&#xff0c;如果比目标字符串大输出“”&#xff0c;相等也输出“”&#xff0c;小则输出“-”&#xff1a; 比较规则&#xff1a; 字母大于数字 两个字母比较按照ASCII码 当被解释为十进制数时&#xff0c;两个数…

CF453C-Little Pony and Summer Sun Celebration【构造】

正题 题目链接:https://www.luogu.com.cn/problem/CF453C 题目大意 nnn个点mmm条边的一张无向图&#xff0c;每个节点有一个wiw_iwi​表示该点需要经过奇数/偶数次。 求一条满足条件的长度不超过4n4n4n的路径 1≤n,m≤1051\leq n,m\leq 10^51≤n,m≤105 解题思路 一个结论就…

在碰撞中成长 - 北京银行的DevOps实践之路

2018年10/27日&#xff0c;在上海召开的微软年度最大规模的技术盛会—微软2018技术暨生态大会上&#xff0c;北京银行渠道系统负责人&敏捷团队负责人周兵女士和大家一起分享了北京银行的DevOps 实践转型经验&#xff0c;得到了大会听众的热烈评价和共鸣&#xff0c;会后众多…