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

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

      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)); }

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

.net core使用jwt自动续期的更多相关文章

  1. .net core webapi jwt 更为清爽的认证 ,续期很简单(2)

    .net core webapi jwt 更为清爽的认证  后续:续期以及设置Token过期 续期: 续期的操作是在中间件中进行的,续期本身包括了前一个Token的过期加发放新的Token,所以在说续 ...

  2. asp.net core 集成JWT(一)

    [什么是JWT] JSON Web Token(JWT)是目前最流行的跨域身份验证解决方案. JWT的官网地址:https://jwt.io/ 通俗地来讲,JWT是能代表用户身份的令牌,可以使用JWT ...

  3. asp.net core 集成JWT(二)token的强制失效,基于策略模式细化api权限

    [前言] 上一篇我们介绍了什么是JWT,以及如何在asp.net core api项目中集成JWT权限认证.传送门:https://www.cnblogs.com/7tiny/p/11012035.h ...

  4. 用Swashbuckle给ASP.NET Core的项目自动生成Swagger的API帮助文档

    博客搬到了fresky.github.io - Dawei XU,请各位看官挪步.最新的一篇是:用Swashbuckle给ASP.NET Core的项目自动生成Swagger的API帮助文档.

  5. [转]部署Let’s Encrypt免费SSL证书&&自动续期

    最近公司网站要用https,从自己摸索到找到国内的免费证书到选购正式的收费证书,最后老板说:太贵!不要.一脸懵逼的听老板提到Let's Encrypt证书,没办法,用呗.之前是有一些了解,国外发布的一 ...

  6. ASP.NET Core 基于JWT的认证(二)

    ASP.NET Core 基于JWT的认证(二) 上一节我们对 Jwt 的一些基础知识进行了一个简单的介绍,这一节我们将详细的讲解,本次我们将详细的介绍一下 Jwt在 .Net Core 上的实际运用 ...

  7. ASP.NET Core 基于JWT的认证(一)

    ASP.NET Core 基于JWT的认证(一) Json web token (JWT), 是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准((RFC 7519).该token被设计 ...

  8. 让网站永久拥有HTTPS - 申请免费SSL证书并自动续期 Let’s Encrypt

    让网站永久拥有HTTPS - 申请免费SSL证书并自动续期 Let’s Encrypt 为什么要用HTTPS  网站没有使用HTTPS的时候,浏览器一般会报不安全,而且在别人访问这个网站的时候,很有可 ...

  9. Asp.Net Core基于JWT认证的数据接口网关Demo

    近日,应一位朋友的邀请写了个Asp.Net Core基于JWT认证的数据接口网关Demo.朋友自己开了个公司,接到的一个升级项目,客户要求用Aps.Net Core做数据网关服务且基于JWT认证实现对 ...

随机推荐

  1. Window平台下的静默下载并安装软件脚本bat

    一,隐藏命令窗口 当我们运行bat脚本的时候,弹出CMD窗口.如果要隐藏窗口可以在bat脚本开头处写一下代码: @echo off if "%1" == "h" ...

  2. 【原创】Centos 7 升级安装python3.7.4

    1.安装必须的软件 #更新源中包列表 yum -y update #先安装扩展源EPEL 才能安装pip 否则会报错 yum -y install epel-release //解决ssl问题,否则报 ...

  3. Centos7部署ejforum论坛(Java+tomcat+mysql)

    前面搭建Java环境和tomcat环境. 下面进行实战,搭建ejforum论坛 ejforum论坛源码:https://www.lanzous.com/i45rcoh Centos7安装MySQL数据 ...

  4. 18、Apache服务器

    --   web 服务器   survey.netcraft.net     --此网站会有每月份的世界上网站使用的WEB服务器的使用率统计   www.apache.org     apache a ...

  5. 阅读高翔的RGBD-SLAM博文笔记

    目录 高翔的RGBD-SLAM笔记 前端VO: 后端优化 高翔的RGBD-SLAM笔记 RGBD相机的特点: 使用RGBD相机中的深度这一维信息,以及相机的针孔成像模型,相机的内参,可以将二维点恢复成 ...

  6. requests---HTTPS请求

    做过接口测试的都会发现,现在的接口都是HTTPS协议了,今天就写一篇如何通过request发送https请求,如果不是很了解HTTP协议的同学可以看下我的另外一篇博客什么是HTTP 什么是HTTPS ...

  7. UiPath:取系统时间/分取各个时间/修改时间显示格式

    取系统时间/分取各个时间/修改时间显示格式解决方法: system_time.Year.ToString+"年"+system_time.Month.ToString+" ...

  8. js中,null, '',undefined的区别

    在js中有三种值都可以代表false  "",null,undefined 那么他们之间到底有什么区别呢 首先我们先看这三种值得类型 ""代表了一个没有字符的字 ...

  9. 理解Javascript执行过程

    Javascript是一种解释型的动态语言. 在程序中,有编译型语言和解释型语言.那么什么是编译型语言,什么是解释型语言呢? 编译型语言: 它首先将源代码编译成机器语言,再由机器运行机器码(二进制). ...

  10. 第一章 了解Web及网络基础

    第一章 了解Web及网络基础 Web建立基础.HTTP如何诞生发展 1.使用HTTP协议访问Web 在浏览器地址栏中输入URL之后过程: 1)DNS 解析:浏览器查询 DNS,获取域名对应的 IP 地 ...