一种JWT存储令牌失效与续期的方法技术

技术编号:35479336 阅读:15 留言:0更新日期:2022-11-05 16:29
本发明专利技术提供了一种JWT存储令牌失效与续期的方法,包括:认证服务器授权;服务器成功授权后,将用户相关信息封装,生成JWT结构的token;客户端后台鉴权;用户携带token访问客户端资源,后台服务在过滤器中对token进行JWT解析;认证服务器鉴权;接收到校验请求后,进行JWT解析,进行鉴权。本发明专利技术所述的JWT存储令牌失效与续期的方法充分发挥两者的优势,并很好地解决JWT无法失效与续期的问题;JWT负载中只暴露非敏感的基本信息,被泄漏也无妨,更安全;可以使用简易的对称加密方式,解析速度更快。解析速度更快。解析速度更快。

【技术实现步骤摘要】
一种JWT存储令牌失效与续期的方法


[0001]本专利技术属于通用后端
,尤其是涉及一种JWT存储令牌失效与续期的方法。

技术介绍

[0002]JWT全称JSON Web Token,是一种基于JSON的开放标准(RFC 7519)协议,由标题(Header)、有效负载(Payload)、签名(Signature)三个部分组成。它是目前最流行的跨域身份验证解决方案。用户与服务器通信时,服务器仅依赖于JWT对象来标识用户,为了防止用户篡改数据,服务器在生成对象时添加签名。JWT保存在客户端中,服务器不需要保存任何会话数据,即服务器为无状态,更容易扩展。
[0003]另一种解决方案是传统的Session模式,会话写入持久层或缓存等,服务器有状态。
[0004]两者都有缺点:
[0005]JWT最大缺点是服务器不保存会话状态,所以在使用期间不可能取消令牌或更改令牌的权限。也就是说,一旦签发,在有效期内将会一直有效。JWT本身包含认证信息,因此一旦信息泄露,任何人都可以获得令牌的所有权限。为了减少盗用,JWT的有效期不宜设置太长。对于重要操作每次请求都必须进行身份鉴权。JWT脱离服务器,也没有办法续期,只能重新签发。
[0006]Session有成熟的存储方案,但查询数据库或缓存往往比验证token要耗时得多,且分布式下端点众多,请求会成堆验证,服务器压力会比较大。

技术实现思路

[0007]有鉴于此,为克服上述缺陷,本专利技术旨在提出一种JWT存储令牌失效与续期的方法。
[0008]为达到上述目的,本专利技术的技术方案是这样实现的:
[0009]一方面,本专利技术提供了一种JWT存储令牌失效与续期的方法,包括:
[0010]认证服务器授权;服务器成功授权后,将用户相关信息封装,生成JWT结构的token;
[0011]客户端后台鉴权;用户携带token访问客户端资源,后台服务在过滤器中对token进行JWT解析;
[0012]认证服务器鉴权;接收到校验请求后,进行JWT解析,进行鉴权。
[0013]进一步的,用户相关信息包括以下中的至少一项:uid用户唯一标识、username用户名、expires_time过期时间。
[0014]进一步的,认证服务器授权中,还包括:
[0015]授权储备两个键值至redis缓存:
[0016]uid:token,键过期时间与expires_time属性一致;
[0017]token:userInfo,表示用户详细信息对象。
[0018]进一步的,客户端后台鉴权,包括如下过程:
[0019]如果结构不符合,视同伪造,抛出异常鉴权失败;
[0020]负载中expires_time过期时间是否过半,过半则需要发送请求至认证服务器鉴权并换取新token;
[0021]过期时间未过半,重要操作或要拿取用户详细信息的接口,也需要请求认证服务器鉴权获取;
[0022]过期时间未过半,仅需简单用户信息的接口,负载信息就能满足,无需再请求认证服务器。
[0023]进一步的,认证服务器鉴权,包括如下步骤:
[0024]接收到校验请求后,解析JWT,结构错误,视为伪造,授权失败;
[0025]负载信息中的uid为key查询redis,不存在视为过期或失效,授权失败;存在则对比两个token值是否一致,不一致视失效,返回401;
[0026]token一致的情况下,过期时间是否过半,未过半则从redis中查询,返回用户详细信息;如果时间已过半,需要重新生成token值,将uid键对应的值替换成新的token,然后删除旧token键,增加新token键。
[0027]进一步的,还包括客户端前台存储;
[0028]其中,针对后端响应的处理逻辑如下:
[0029]如果是正常响应,判断响应体中是否含有新token,若有则将新token存储在localstorage本地缓存中,并清除旧token;
[0030]如果是异常响应,授权失败,则清除现有token,并重定向至登录页;
[0031]其中,向后端发送请求的处理逻辑:
[0032]每次请求都在Header中带上本地存储的token。
[0033]第二方面,本专利技术提供了一种电子设备/服务器,包括处理器,以及与处理器通信连接,且用于存储所述处理器可执行指令的存储器,所述处理器在执行所述指令时,实现上述第一方面所述的JWT存储令牌失效与续期的方法。
[0034]第三方面,本专利技术提供了一种可读取存储介质,用于存储计算机程序,所述计算机程序在被处理器执行时,实现上述第一方面所述的JWT存储令牌失效与续期的方法。
[0035]相对于现有技术,本专利技术所述的JWT存储令牌失效与续期的方法具有以下优势:
[0036]1、本专利技术所述的JWT存储令牌失效与续期的方法,充分发挥两者的优势,并很好地解决JWT无法失效与续期的问题;JWT负载中只暴露非敏感的基本信息,被泄漏也无妨,更安全;可以使用简易的对称加密方式,解析速度更快。
[0037]2、Redis存储符合分布式要求,易于横向扩展。
[0038]3、过半机制,比refresh_token刷新续期模式,步骤更简便。
[0039]4、大部分情况下,接口只需要用户的简易信息,依靠JWT结构的优势,减少认证服务器压力的同时,响应更快。
[0040]5、对于重要操作或需要拿取用户详细信息的接口,能到认证服务器进行鉴权,更加的安全。
附图说明
[0041]构成本专利技术的一部分的附图用来提供对本专利技术的进一步理解,本专利技术的示意性实施例及其说明用于解释本专利技术,并不构成对本专利技术的不当限定。在附图中:
[0042]图1为本专利技术所述的认证服务器授权流程图;
[0043]图2为本专利技术所述的客户端后台鉴权流程图;
[0044]图3为本专利技术所述的认证服务器鉴权流程图;
[0045]图4为本专利技术所述的客户端前台存储流程图。
具体实施方式
[0046]需要说明的是,在不冲突的情况下,本专利技术中的实施例及实施例中的特征可以相互组合。
[0047]下面将参考附图并结合实施例来详细说明本专利技术。
[0048]本实施例提供了一种JWT存储令牌失效与续期的方法,包括如下过程:
[0049]1、认证服务器授权
[0050]如图1所示,用户登录,认证服务器成功授权后将uid(用户唯一标识),username(用户名),expires_time(过期时间)等必要非敏感信息封装进Payload负载中,生成JWT结构的token,返回客户端保存。
[0051]授权储备两个键值至redis缓存:
[0052]a、uid:token,键过期时间与expires_time属性一致。
[0053]b、token:user本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种JWT存储令牌失效与续期的方法,其特征在于,包括:认证服务器授权;服务器成功授权后,将用户相关信息封装,生成JWT结构的token;客户端后台鉴权;用户携带token访问客户端资源,后台服务在过滤器中对token进行JWT解析;认证服务器鉴权;接收到校验请求后,进行JWT解析,进行鉴权。2.根据权利要求1所述的JWT存储令牌失效与续期的方法,其特征在于,用户相关信息包括以下中的至少一项:uid用户唯一标识、username用户名、expires_time过期时间。3.根据权利要求1所述的JWT存储令牌失效与续期的方法,其特征在于,认证服务器授权中,还包括:授权储备两个键值至redis缓存:uid:token,键过期时间与expires_time属性一致;token:userInfo,表示用户详细信息对象。4.根据权利要求1所述的JWT存储令牌失效与续期的方法,其特征在于,客户端后台鉴权,包括如下过程:如果结构不符合,视同伪造,抛出异常鉴权失败;负载中expires_time过期时间是否过半,过半则需要发送请求至认证服务器鉴权并换取新token;过期时间未过半,重要操作或要拿取用户详细信息的接口,也需要请求认证服务器鉴权获取;过期时间未过半,仅需简单用户信息的接口,负载信息就能满足,无需再请求认证服务器。5.根据权利要求1所述的JWT存储令牌失效与续期的方法,其特征在于,认证服务器鉴权,包括如下步骤:接收到校验...

【专利技术属性】
技术研发人员:邹虎奉忠盛
申请(专利权)人:紫光云技术有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1