一种基于JWT的认证鉴权方法、计算机可读介质及系统与流程

文档序号:18898971发布日期:2019-10-18 21:40阅读:152来源:国知局
一种基于JWT的认证鉴权方法、计算机可读介质及系统与流程

本发明涉及认证鉴权领域,尤其涉及一种基于jwt的认证鉴权方法、计算机可读介质及系统。



背景技术:

现有主流认证鉴权方法主要有两种:一种需要服务端保留session信息(一种服务端机制),这种方式可以最大程度避免客户端伪造认证鉴权信息造成的非法访问,也可以灵活控制用户认证的过期与失效。服务端存储的session,需要能被快速读取,同时session的数量也和活跃用户数量呈线性相关,在大量用户突发涌入的场景下,对session的存储和处理将会消耗大量资源,如果资源扩容不充分或不及时,可能会造成处理缓慢或者系统崩溃等问题。

另一种实现思路是使用jwt(jsonwebtoken,一种用来在网络上声明某种身份的令牌)技术,将用户唯一标识、权限等信息形成token(令牌),存储在客户端中,这种方式切断了session对资源的要求和活跃用户数量的相关性,避免了session方案在高并发场景下的缺点,同时,由于服务端不需要存储session,理论上可以实现无限制的水平扩展。但是jwt技术在发出accesstoken(访问token)之后,就无法对发出的accesstoken进行更改,在此期间,其他用户只要拥有该用户的accesstoken,就可以使用该用户的accesstoken访问服务端,直到accesstoken超出有效时间,同时通过refreshtoken(刷新token)刷新出一个新的accesstoken,才能使其他用户无法使用accesstoken访问服务端,因此在accesstoken过期之前存在安全隐患。



技术实现要素:

为克服现有技术存在的问题,本发明提供一种基于jwt的认证鉴权方法、计算机可读介质及系统。

本发明解决技术问题的方案是提供一种基于jwt的认证鉴权方法,该方法包括以下步骤:步骤s1:基于jwt技术输出token,并生成token数据库;步骤s2:客户端发送登录请求,服务端从token数据库中分配一待认证token至客户端;步骤s3:对分配的待认证token做选择性的标记,并根据标记的待认证token生成一失效token库;步骤s4:获取与客户端输入的登录请求相匹配的待认证token;步骤s5:将待认证token与失效token库中的token进行匹配;若匹配成功,认证失败,若匹配不成功,认证成功。

优选地,步骤s3对分配的token做选择性的标记,并根据标记的token生成一失效token库,进一步包括:步骤s21:对分配的待认证token做选择性的标记;步骤s22:根据标记的待认证token生成一失效token库。

优选地,所述token包括accesstoken和refreshtoken,所述accesstoken用于登录,所述refreshtoken用于刷新accesstoken。

优选地,上述步骤s1中,基于jwt技术结合用户信息和accesstoken的有效时间输出accesstoken。

优选地,上述步骤s1中,基于jwt技术结合refreshtoken的有效时间输出refreshtoken。

优选地,步骤s5将待认证token与失效token库中的token进行匹配;若匹配成功,认证失败,若匹配不成功,认证成功,之前进一步包括以下步骤:步骤s501:验证待认证accesstoken是否合法,若合法,则进入步骤s502,若不合法,则认证失败;及步骤s502:验证待认证accesstoken是否在有效时间内,若是,则进入步骤s5;若否,则认证失败。

本发明还提供一种计算机可读介质,其特征在于:所述计算机可读介质中存储有计算机程序,其中,所述计算机程序被设置为运行时执行上述的认证鉴权方法。

本发明还提供一种认证鉴权系统,所述认证鉴权系统包括:数据库模块,被配置为基于jwt技术输出token,并生成token数据库;分配模块,被配置为客户端发送登录请求,服务端从token数据库中分配一token至客户端失效token库模块,被配置为对分配的token做选择性的标记,并根据标记的token生成一失效token库;读取模块,被配置为获取与客户端输入的登录请求相匹配的待认证token;及失效验证模块,被配置为将待认证token与失效token库中的token进行匹配;若匹配成功,认证失败,若匹配不成功,认证成功。

优选地,所述失效token库模块进一步包括:标记单元,被配置为对分配的token做选择性的标记;及生成单元,被配置为根据标记的token生成一失效token库。

优选地,所述认证鉴权系统进一步包括:合法验证模块,被配置为验证获取的accesstoken是否合法,若合法,则进入过期验证模块,若不合法,则认证失败;及过期验证模块,被配置为验证获取的token是否在有效时间内,若是,则进入失效验证模块,若否,则认证失败。

与现有技术相比,本发明的认证鉴权方法、计算机可读介质及认证鉴权系统具有以下优点:

1.在现有的jwt技术中加入对失效token的验证,以使用户根据自身的实际情况,对分配的待认证token进行标记,进而根据标记的待认证token生成失效token库,以增加用户进行认证鉴权的安全性,同时,待认证token与失效token库中的token进行匹配时,可以以减少服务端进行匹配工作时所占用的资源。

2.验证token是否失效时,只需将用户的输入的待认证accesstoken与失效token库中的token进行比对,而不需要将待认证accesstoken与整个token数据库进行匹配,以减少服务端进行匹配工作时所占用的资源。

3.将认证鉴权方法存储于计算机程序中,以便于计算机可读介质运行该计算机程序,以实现认证鉴权。

4.在认证鉴权系统中设置数据库模块、分配模块、失效token库模块、读取模块及失效验证模块,以使认证鉴权系统能够进行认证鉴权。

【附图说明】

图1是本发明第一实施例基于jwt的认证鉴权方法的流程示意图。

图2是本发明第一实施例基于jwt的认证鉴权方法中步骤s2的流程示意图。

图3是本发明第一实施例基于jwt的认证鉴权方法的认证流程示意图。

图4是本发明第三实施例认证鉴权系统的第一部分模块示意图。

图5是本发明第三实施例认证鉴权系统中失效token库模块的模块示意图。

图6是本发明第三实施例认证鉴权系统的第二部分模块示意图。

附图标记说明:1、认证鉴权系统;11、数据库模块;12、分配模块;13、失效token库模块;14、读取模块;15、失效验证模块;131、标记单元;132、生成单元;16、合法验证模块;17、过期验证模块。

【具体实施方式】

为了使本发明的目的,技术方案及优点更加清楚明白,以下结合附图及实施实例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。

请参阅图1,本发明第一实施例提供一种基于jwt的认证鉴权方法,该方法包括以下步骤,

步骤s1:基于jwt技术输出token,并生成token数据库;

步骤s2:客户端发送登录请求,服务端从token数据库中分配一待认证token至客户端;

步骤s3:对分配的待认证token做选择性的标记,并根据标记的待认证token生成一失效token库;

步骤s4:获取与客户端输入的登录请求相匹配的待认证token;

步骤s5:将待认证token与失效token库中的token进行匹配;若匹配成功,认证失败,若匹配不成功,认证成功。

首先,基于jwt技术输出token,并将输出的token全部存储起来,以生成一个token数据库;以当客户端向服务端发送登录请求之后,服务端从token数据库中分配一个待认证token至客户端;

进而,用户根据实际情况对分配的待认证token做选择性的标记,继而根据标记的待认证token在服务端生成一失效token库;

当服务端获取与客户端输入的登录请求向匹配的待认证token之后,服务端将获取的待认证token与失效token库中的token进行匹配,若匹配成功,则说明该待认证token已经存在与失效token库中,即该待认证token已失效,因此认证失败,也即判定为该用户的登录认证失败,若匹配失败,则说明该待认证token不存在于失效token库中,因此认证成功,即判定为该用户的登录认识成功。

进一步地,token包括accesstoken和refreshtoken,accesstoken用于登录认证,refreshtoken用于刷新accesstoken。基于jwt技术输出的accesstoken和refreshtoken均存在一个有效时间,如一小时、一天、一周等。

accesstoken为基于jwt技术结合用户信息和accesstoken的有效时间输出的,refreshtoken为基于jwt技术结合refreshtoken的有效时间输出的,因此accesstoken和refreshtoken均只能在一段时间内使用,即分配至客户端的待认证accesstoken只能在有效时间内使用,超过待认证accesstoken的有效时间,即为待认证accesstoken过期,则使用待认证accesstoken时会认证失败,同时refreshtoken刷新出一个新的accesstoken;

此时,客户端再次发送登录请求时,服务端会再次从token数据库中分配一个新的待认证accesstoken至客户端,进而,客户端可使用新的待认证accesstoken进行登录认证。

可以理解,待认证accesstoken为一串乱码字符组成的密匙,用户信息包括用户的用户名和用户权限等,在现有的jwt认证中,由于服务端从token数据库中分配出待认证accesstoken之后,就无法对分配出的待认证accesstoken进行更改,必须要等到待认证accesstoken超出其有效时间,然后refreshtoken刷新分配出的待认证accesstoken,才能使待认证accesstoken不可用。有鉴于此,本发明基于jwt的认证鉴权方法对现有的jwt认证进行改进,当待认证accesstoken在有效时间内授予给他人,之后又不想让被授予的用户登录之时,通过对授予出去的待认证accesstoken进行标记,以此来对授予出去的待认证accesstoken进行失效处理,阻断了被授予的用户使用待认证accesstoken登录,增加认证鉴权的安全性。

请参阅图2,步骤s3对分配的token做选择性的标记,并根据标记的token生成一失效token库,进一步包括:

步骤s21:对分配的待认证token做选择性的标记;

步骤s22:根据标记的token生成一失效token库。

首先,对分配的token做选择性的标记,即对分配的待认证accesstoken做选择性的标记,以使标记的待认证accesstoken进入失效状态;然后,根据标记的待认证accesstoken生成一失效token库,即将所有标记的待认证accesstoken存储起来,形成一失效token库,进而在对客户端输入的待认证accesstoken进行失效认证时,只需要将待认证accesstoken与失效token库中accesstoken进行匹配,即可判断出输入的待认证accesstoken是否失效,而不需要将待认证accesstoken与整个token数据库中的accesstoken进行匹配,减少服务端进行匹配工作时所占用的资源;

进而,根据待认证accesstoken与失效token库中accesstoke的匹配结果,得出认证结果,即认证成功或认证失败。

请参阅图3,步骤s5将待认证token与失效token库中的token进行匹配;若匹配成功,认证失败,若匹配不成功,认证成功,之前进一步包括以下步骤:

步骤s501:验证待认证accesstoken是否合法,若合法,则进入步骤s502,若不合法,则认证失败;

步骤s502:验证待认证accesstoken是否在有效时间内,若是,则进入步骤s5;若否,则认证失败。

首先,验证待认证accesstoken是否合法,即将待认证accesstoken与token数据库中的accesstoken进行匹配,若匹配成功,则判定待认证accesstoken合法,反之,则判定待认证accesstoken不合法,

当验证待认证accesstoken合法之后,再对待认证accesstoken进行过期验证,当验证待认证accesstoken不合法时,则得出认证结果,即认证失败。

然后,验证待认证accesstoken是否在有效时间内,即待认证accesstoken是否过期,若待认证accesstoken在有效时间内,即待认证accesstoken未过期,则将待认证accesstoken与失效token库中的token进行失效验证,若待认证accesstoken不在有效时间内,即待认证accesstoken已过期,则得出认证结果,即认证失败。

可以理解,合法即为验证待认证accesstoken与服务端中的token是否一致,若一致,则表示待认证accesstoken合法,若不一致,则表示待认证accesstoken不合法,待认证accesstoken是否过期即为待认证accesstoken是在有效时间内。

在一些应用场景中,用户甲使用客户端发送登录服务器的请求,服务端从token数据库中分配一待认证accesstoken至用户甲的客户端;

此时,用户乙由于工作或者业务上的需要,请求使用用户甲的用户信息登录服务器,因此,用户甲将服务器分配的待认证accesstoken授予给用户乙;

当用户甲将待认证accesstoken授予给用户乙之后,且用户乙尚未使用用户甲授予的待认证accesstoken进行登录时;

此时,用户甲处于隐私和安全的考虑,不想用户乙使用用户甲的用户信息和待认证accesstoken登录,因此,用户甲通过服务端,将授予给用户乙的待认证accesstoken进行标记,以使该待认证accesstoken进入失效token库;

最后,用户乙使用用户甲的用户信息和待认证accesstoken进行登录时,服务端就会认证用户乙输入的待认证accesstoken失效,即用户乙认证失败。

本发明第二实施例提供一种计算机可读介质,计算机可读介质中存储有计算机程序,其中,计算机程序被设置为运行时执行上述的认证鉴权方法。

根据本公开的实施例,上文参考流程图描述的过程可以被实现为计算机软件程序。例如,本公开的实施例包括一种计算机程序产品,其包括承载在计算机可读介质上的计算机程序,该计算机程序包含用于执行流程图所示的方法的程序代码。在这样的实施例中,该计算机程序可以通过通信部分从网络上被下载和安装,和/或从可拆卸介质被安装。在该计算机程序被中央处理单元(cpu)执行时,执行本申请的方法中限定的上述功能。需要说明的是,本申请所述的计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质或者是上述两者的任意组合。计算机可读存储介质例如包括但不限于电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子可以包括但不限于:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机访问存储器(ram)、只读存储器(rom)、可擦式可编程只读存储器(eprom或闪存)、光纤、便携式紧凑磁盘只读存储器(cd-rom)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本申请中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。而在本申请中,计算机可读的信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。计算机可读的信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于:无线、电线、光缆、rf等等,或者上述的任意合适的组合。

可以以一种或多种程序设计语言或其组合来编写用于执行本申请的操作的计算机程序代码,所述程序设计语言包括面向对象的程序设计语言诸如java、smalltalk、c++,还包括常规的过程式程序设计语言诸如“c”语言或类似的程序设计语言。程序代码可以完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机或服务端上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络包括局域网(lan)或广域网(wan)连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通过因特网连接)。

请参阅图4,本发明第三实施例提供一种认证鉴权系统1,包括数据库模块11、分配模块12、失效token库模块13、读取模块14及失效验证模块15,

数据库模块11被配置为服务端基于jwt技术输出token,并生成token数据库;

分配模块12被配置为客户端发送登录请求,服务端从token数据库中分配一token至客户端

失效token库模块13被配置为对分配的token做选择性的标记,并根据标记的token生成一失效token库;

读取模块14被配置为获取与客户端输入的登录请求相匹配的待认证token;及

失效验证模块15被配置为将待认证token与失效token库中的token进行匹配;若匹配成功,认证失败,若匹配不成功,认证成功。

请参阅图5,失效token库模块13进一步包括标记单元131和生成单元132;

标记单元131被配置为对分配的token做选择性的标记;

生成单元132被配置为根据标记的token生成一失效token库。

请参阅图6,所述认证鉴权系统进一步包括合法验证模块16和过期验证模块17;

合法验证模块16被配置为验证获取的accesstoken是否合法,若合法,则进入过期验证模块,若不合法,则认证失败;

过期验证模块17被配置为验证获取的token是否在有效时间内,若是,则进入失效验证模块,若否,则认证失败。

在失效验证模块对待认证toke进行失效验证之前,先使用合法验证模块16验证待认证toke是否合法,完成合法验证模块16的验证之后,然后再使用过期验证模块17验证待认证toke是否过期,完成过期验证模块17的验证之后,最后才使用失效验证模块15验证待认证toke是否失效。

第一实施例中的相关限定内容同样适用于本实施例。

与现有技术相比,本发明的认证鉴权方法、计算机可读介质及认证鉴权系统具有以下优点:

1.在现有的jwt技术中加入对失效token的验证,以使用户根据自身的实际情况,对分配的待认证token进行标记,进而根据标记的待认证token生成失效token库,以增加用户进行认证鉴权的安全性,同时,待认证token与失效token库中的token进行匹配时,可以以减少服务端进行匹配工作时所占用的资源。

2.验证token是否失效时,只需将用户的输入的待认证accesstoken与失效token库中的token进行比对,而不需要将待认证accesstoken与整个token数据库进行匹配,以减少服务端进行匹配工作时所占用的资源。

3.将认证鉴权方法存储于计算机程序中,以便于计算机可读介质运行该计算机程序,以实现认证鉴权。

4.在认证鉴权系统中设置数据库模块、分配模块、失效token库模块、读取模块及失效验证模块,以使认证鉴权系统能够进行认证鉴权。

以上所述仅为本发明较佳实施例而已,并不用以限制本发明,凡在本发明原则之内所作的任何修改,等同替换和改进等均应包含本发明的保护范围之内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1