首页 > 其他分享 >.net core使用jwt自动续期

.net core使用jwt自动续期

时间:2024-08-28 10:50:26浏览次数:7  
标签:core jwt isExpires tokenMode token context new net

.net core使用jwt自动续期

 

           小弟不C才,最近看了下网上的jwt方案,于是自己写了一个简单的jwt方案和大家分享下,希望大家给点意见!

           假如有一个读书网站,可以不用登陆就访问,当需要自己写文章的时候就必须登录,并且登录之后如果一段时间内没有访问,则过期了需要重新登录。有效期内有登录则自动续期,所以我想使用中间件来负责token的更新以及删除。如下部分代码:

     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 public async Task InvokeAsync(HttpContext context)   {       try       {           bool isExpires = context.Request.Headers.TryGetValue("isExpires"out StringValues expires);           bool IsAuthorized = context.Request.Headers.TryGetValue("Authorization"out StringValues authStr);           string token = authStr.ToString().Substring("Bearer ".Length).Trim();           //每次访问都更新token有效期           new JWT(_cacheClient).RefreshToken(token, isExpires);           context.Response.Headers.Add("refreshTokne", token);       }       catch (ValidationException)       {           if (context.Request.Path.Value.Contains("api/auth/islogin"))           {               context.Response.ContentType = "text/plain";               await context.Response.WriteAsync("not login");           }       }         await _next(context);   }     /// <summary>   /// 生成jwtToken,有效期30分钟   /// </summary>   /// <param name="claims"></param>   /// <returns></returns>   public static string CreateToken(IEnumerable<Claim> claims)   {       var key = new SymmetricSecurityKey(System.Text.Encoding.UTF8.GetBytes(SecurityKey));       var expires = DateTime.Now.AddMinutes(30);       var token = new JwtSecurityToken(                   issuer: issuer,                   audience: audience,                   claims: claims,                   notBefore: DateTime.Now,                   expires: expires,                   signingCredentials: new SigningCredentials(key, SecurityAlgorithms.HmacSha256Signature));       string jwtToken = new JwtSecurityTokenHandler().WriteToken(token);       return jwtToken;   }   /// <summary>   /// 更新token,先通过前端传过来的token从redis里取出jwt,如果为null,则表   ///示过期或未登录,如果jwt过期,则更新jwt,并且通过中间件把新的token放到响应头里返回前端。   /// </summary>   /// <param name="token">token</param>   /// <param name="isExpires">是否失效</param>   public  void RefreshToken(string token,bool isExpires=false)   {         TokenModel tokenMode = _cacheClient.Get<TokenModel>(token);       if (tokenMode == null)           throw new ValidationException("expires");       JwtSecurityToken jwtSecurityToken= new JwtSecurityTokenHandler().ReadJwtToken(token);       if(isExpires)           token = CreateToken(jwtSecurityToken.Claims);       tokenMode.ExpireTime = tokenMode.ExpireTime.AddDays(7);       if(tokenMode.ExpireTime.Day-DateTime.Now.Day==1)//实现最后一天如果访问了就自动续期           _cacheClient.Set(token, tokenMode, TimeSpan.FromDays(7));     }

  然后前端可以根据响应结果来判断是否跳到登录页。

标签:core,jwt,isExpires,tokenMode,token,context,new,net
From: https://www.cnblogs.com/sexintercourse/p/18384150

相关文章

  • 简单理解.net 依赖注入的三种方式
    简单理解.net依赖注入的三种方式 前言:.NET5.0于2020年11月10日正式发布,它是3.1之后的.NETCore的下一个主要版本。微软将这个新版本命名为.NET5.0而不是.NETCore4.0,其原因有两个:     1、跳过了版本号4.x,以避免与.NETFramework4.x混淆。   ......
  • .net core下使用事件总线
    .netcore下使用事件总线        随着微服务的火热,DDD(领域驱动设计模式)思想风起云涌,冲击着整个软件生态系统。其中,事件总线那是必须知道的了,于是我便抱着一个学习DDD的心态搭建了一个博客网站,目前该网站正在建设阶段,后续会不断完善,这里我只是讲一下我里面所用到的......
  • 一起来学习.net core程序使用中介者模式:MediatR插件
    一起来学习.netcore程序使用中介者模式:MediatR插件     中介者模式是一种常见的设计模式,旨再降低程序的耦合性,因为传统的三层模式层层之间需要显示的调用,必须上层依赖下层,耦合性很高,为了解耦,将所有的指令单独放在一个位置处理,其他位置均通过这个位置来间接的调用,从......
  • 实用接地气的 .NET 微服务框架
    前言微服务架构已经成为搭建高效、可扩展系统的关键技术之一,然而,现有许多微服务框架往往过于复杂,使得我们普通开发者难以快速上手并体验到微服务带了的便利。为了解决这一问题,于是作者精心打造了一款最接地气的.NET微服务框架,帮助我们轻松构建和管理微服务应用。本框架不仅支......
  • 秃姐学AI系列之:残差网络 ResNet
    目录残差网络——ResNet残差块思想ResNet块细节ResNet架构总结代码实现残差块两种ResNet块的情况 ResNet模型QA由上图发现,只有当较复杂的函数类包含较小的函数类时,才能确保提高它们的性能。对于深度神经网络,如果我们能将新添加的层训练成恒等映射(identityfu......
  • .NET与AI的碰撞:开启智能编程新纪元
    设想一下,你是一名.NET开发者,正为一个复杂的数据分析项目绞尽脑汁。突然,你的IDE仿佛有了生命,不仅能理解你的想法,还能自动生成大部分代码,甚至主动指出潜在的优化空间。这听起来像是科幻电影中的场景,但实际上,这种“魔法”正在成为现实!让我们一同探讨.NET世界正在经历的激动人心的变革......
  • 基于Ubuntu部署企业级kubernetes集群
    1.主机名配置由于本次使用3台主机完成kubernetes集群部署,其中1台为master节点,名称为k8s-master01;其中2台为workoer节点,名称分别为:k8s-worker01及k8s-worker02master节点hostnamectlset-hostnamek8s-master01Worker01节点hostnamectlset-hostnamek8s-worker01Work......
  • 自建 NFS 服务器实现 Kubernetes 持久化存储
    1.简介在Kubernetes集群中,持久化存储是一个非常重要的组件。它允许我们保存需要长期保留的数据,即使Pod被删除或重新调度,这些数据也不会丢失。网络文件系统(NFS)是一种简单、可靠且广泛使用的存储解决方案。本文将详细介绍如何在CentOS7系统上搭建NFS服务器,并......
  • Kubernetes (K8s) 监控方案:Prometheus 实战指南
    1.引言在当今云原生时代,Kubernetes(K8s)已成为容器编排的标准解决方案。然而,随着K8s集群规模和复杂性的增加,有效的监控变得至关重要。本文将详细介绍如何使用Prometheus构建一个全面而强大的K8s监控系统,帮助您实时掌握集群状态,快速定位问题,并优化资源利用。2.监......
  • 驾驭ASP.NET MVC:C# Web开发的精粹
    标题:驾驭ASP.NETMVC:C#Web开发的精粹摘要ASP.NETMVC是微软提供的一个用于构建动态网站的服务器端框架,它遵循模型-视图-控制器(MVC)设计模式,以实现代码的高内聚低耦合。本文将深入探讨如何在C#中使用ASP.NETMVC框架进行Web应用程序开发,包括项目结构、路由、控制器、视图和......