tnblog
首页
视频
资源
登录
愿你出走半生,归来仍是少年
排名
3
文章
317
粉丝
22
评论
14
bootstrap 栅格布局一小例子
剑轩 : 后端写样式有点痛苦哇
一点flex布局的运用
剑轩 : 后端写样式有点痛苦哇
vue.js常用指令
剑轩 : 可以可以,多总结一点
ICP备案 :渝ICP备18016597号-1
网站信息:2018-2025TNBLOG.NET
技术交流:群号656732739
联系我们:contact@tnblog.net
公网安备:50010702506256
欢迎加群交流技术

.net 验证jwt的同时取出负载部分

5125人阅读 2020/1/26 19:11 总访问:2059306 评论:0 收藏:0 手机
分类: NET


验证的同时直接获取负载部分PayLoad,验证成功了难得再取一次

  1. /// <summary>
  2. /// 验证的同时直接获取负载部分PayLoad,验证成功了难得再取一次
  3. /// </summary>
  4. /// <param name="encodeJwt"></param>
  5. /// <param name="validatePayLoad"></param>
  6. /// <returns></returns>
  7. public bool ValidatePayLoad(string encodeJwt,out Dictionary<stringstring> outpayLoad, Func<Dictionary<stringstring>, bool> validatePayLoad = null)
  8. {
  9.     outpayLoad = null;
  10.     var success = true;
  11.     var jwtArr = encodeJwt.Split('.');
  12.     if (jwtArr.Length < 3)//数据格式都不对直接pass
  13.     {
  14.         return false;
  15.     }
  16.     //var header = JsonConvert.DeserializeObject<Dictionary<string, string>>(Base64UrlEncoder.Decode(jwtArr[0]));
  17.     var payLoad = JsonConvert.DeserializeObject<Dictionary<stringstring>>(Base64UrlEncoder.Decode(jwtArr[1]));
  18.     //在配置文件中取出来的签名秘钥
  19.     var hs256 = new HMACSHA256(Encoding.ASCII.GetBytes(_options.Value.IssuerSigningKey));
  20.     //验证签名是否正确(把用户传递的签名部分取出来和服务器生成的签名匹配即可)
  21.     success = success && string.Equals(jwtArr[2], Base64UrlEncoder.Encode(hs256.ComputeHash(Encoding.UTF8.GetBytes(string.Concat(jwtArr[0], ".", jwtArr[1])))));
  22.     if (!success)
  23.     {
  24.         return success;//签名不正确直接返回
  25.     }
  26.     //其次验证是否在有效期内(也应该必须)
  27.     var now = ToUnixEpochDate(DateTime.UtcNow);
  28.     success = success && (now >= long.Parse(payLoad["nbf"].ToString()) && now < long.Parse(payLoad["exp"].ToString()));
  29.     //不需要自定义验证不传或者传递null即可
  30.     if (validatePayLoad == null)
  31.         return true;
  32.     //再其次 进行自定义的验证
  33.     success = success && validatePayLoad(payLoad);
  34.     outpayLoad = payLoad;
  35.     return success;
  36. }

使用如下:

  1. Dictionary<stringstring> outpayLoad;
  2. ITokenHelper tokenHelper = HttpContext.RequestServices.GetService(typeof(ITokenHelper)) as ITokenHelper;
  3. //验证jwt
  4. bool isValidate = tokenHelper.ValidatePayLoad(token,out outpayLoad, a => a["iss"] == "i" && a["aud"] == "xj");
  5. if (isValidate==false)
  6. {
  7.     ViewBag.islogin = "false";
  8.     HttpContext.Response.Cookies.Delete("token");
  9.     return null;
  10. }






欢迎加群讨论技术,1群:677373950(满了,可以加,但通过不了),2群:656732739。有需要软件开发,或者学习软件技术的朋友可以和我联系~(Q:815170684)

评价

net core 使用 EF Code First

下面这些内容很老了看这篇:https://www.tnblog.net/aojiancc2/article/details/5365 项目使用多层,把数据库访问...

cAPS.net 保存base64位格式的图片

publicvoidUpload() { //取出图片对应的base64位字符 stringimgBase=Request[&quot;imgBase&quot;]; //c#里边的base6...

Quartz.net实例动态改变周期调度。misfire、Cron

Quartz:Java编写的开源的任务调度作业框架 类似Timer之类定时执行的功能,但是更强大Quartz.NET:是把Quartz转成C# NuGet...

.net Windows服务发布、安装、卸载、监听脚本。服务调试

一、脚本 为方便不用每次都去写安装卸载的脚本1.安装脚本@echooff @echo开始安装【服务】 %SystemRoot%\Microsoft.NET\Fr...

c、VB.net中全角半角转换方法

///&lt;summary&gt; ///转全角的函数(SBCcase) ///&lt;/summary&gt; ///&lt;paramname=&quot;input&quot;&gt;任意字符串...

.net mvc分部页,.net core分部页

.net分部页的三种方式第一种:@Html.Partial(&quot;_分部页&quot;)第二种:@{ Html.RenderPartial(&quot;分部页&quot;);}...

C.net 配合小程序实现经过第三方服务器中转文件

某些时候,微信小程序前段上传文件的时候需要经过第三方服务器再将文件上传到客户的服务器;操作如下:1:(小程序内向中端服...

.net实现QQ邮箱发送邮件功能

1、微软已经帮我们封装好了发送邮件的类MailMessage,MailMessage类构造一些邮件信息,然后通过SmtpClient进行邮件发送。Mai...

StackExchange.Redis操作redis(net core支持)

官方git开源地址https://github.com/StackExchange/StackExchange.Redis官方文档在docs里边都是官方的文档通过nuget命令下...

windows 自带的netsh进行端口映射

使用netsh 把本地任意ip的25566端口 映射到192.168.81.234的25565端口netshinterfaceportproxyaddv4tov4listenaddress=0.0....

确保.net程序始终以管理员身份运行

usingSystem; usingSystem.Collections.Generic; usingSystem.Linq; usingSystem.Text; usingSystem.Threading.Tasks; ...

ASP.net Timer细节处理

Timer的用法:1:本人称之为计时器,是asp.net官方的一种。用法即是计时所用 2:关于计时有很多中方式,本人学识有限,暂...

.net core 使用session

tip:net core 2.2后可以直接启用session了,不用在自己添加一次session依赖,本身就添加了使用nuget添加引用Microsoft.AspN...

通俗易懂,什么是.net?什么是.net Framework?什么是.net core?

朋友圈@蓝羽 看到一篇文章写的太详细太通俗了,搬过来细细看完,保证你对.NET有个新的认识理解原文地址:https://www.cnblo...

asp.net core2.0 依赖注入 AddTransient与AddScoped的区别

asp.net core主要提供了三种依赖注入的方式其中AddTransient与AddSingleton比较好区别AddTransient瞬时模式:每次都获取一...

asp.net主动推送百度seo

虽然可以使用百度提供的js自动推送,但是估计度娘还是希望主动推送一点。哈哈^_^,女孩子嘛大多都喜欢被动一点。publicclass...