基于共享黑名单撤销JWT令牌实时生效的方法转让专利

申请号 : CN201910554421.1

文献号 : CN110276197A

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 李强王凤琴

申请人 : 四川长虹电器股份有限公司

摘要 :

本发明提出一种基于共享黑名单撤销JWT令牌实时生效的方法,属于计算机安全领域。本发明技术方案要点为:平台端分别启动认证服务和业务服务;在平台端构建分布式缓存,存放黑名单记录;认证服务端生成公私钥对,保存私钥在本地,将公钥发送给各个业务服务;用户使用其凭据访问和登录平台端的认证服务;认证服务端验证用户的凭据有效后,登录成功,使用私钥加密和生成一个JWT令牌并返回给用户;用户使用JWT令牌访问各个业务服务端;业务服务端访问黑名单缓存,看JWT令牌是否在黑名单中,若在,则拒绝向用户端提供服务;若不在,业务服务端向用户端提供服务;平台管理员撤销某个用户的JWT令牌,将信息写入分布式缓存的黑名单记录中。

权利要求 :

1.基于共享黑名单撤销JWT令牌实时生效的方法,其特征在于,包括如下步骤:步骤1、平台端分别启动认证服务和业务服务;

步骤2、在平台端构建分布式缓存,存放黑名单记录;

步骤3、认证服务端生成公私钥对,保存私钥在本地,将公钥发送给各个业务服务;

步骤4、用户使用其凭据访问和登录平台端的认证服务;

步骤5、认证服务端验证用户的凭据有效后,登录成功,使用私钥加密和生成一个JWT令牌并返回给用户;

步骤6、用户使用JWT令牌访问各个业务服务端;

步骤7、业务服务端访问黑名单缓存,看JWT令牌是否在黑名单中,如果在黑名单,则拒绝向用户端提供服务;如果不在黑名单,进入步骤8;

步骤8、业务服务端向用户端提供服务;

步骤9、平台管理员撤销某个用户的JWT令牌,将信息写入分布式缓存的黑名单记录中。

2.根据权利要求1所述的基于共享黑名单撤销JWT令牌实时生效的方法,其特征在于,步骤1中,所述认证服务和业务服务均为平台端的接口服务,所述认证服务和业务服务的形式为RESTful API服务或远程过程调用服务。

3.根据权利要求1所述的基于共享黑名单撤销JWT令牌实时生效的方法,其特征在于,步骤1中,所述认证服务的承载服务器为单机或集群,所述业务服务的承载服务器为单机或集群。

4.根据权利要求1所述的基于共享黑名单撤销JWT令牌实时生效的方法,其特征在于,步骤2中,所述分布式缓存为:与业务服务位于同一个主机,或独立成单独的主机,或独立成单独的主机集群。

5.根据权利要求1或4所述的基于共享黑名单撤销JWT令牌实时生效的方法,其特征在于,步骤2中,所述分布式缓存具体包括如下步骤:步骤201、利用内存作为存储黑名单数据的空间,在内存中划出一块区域作为存储区;

步骤202、若部署的节点不止一台服务器,那么每个节点服务器的内存存储区需要实现实时的数据同步的功能、节点故障恢复及数据强一致性的功能;

步骤203、若黑名单数据量比较大,超出了单个节点内存存储容量,那么该存储区还应有数据哈希分布的功能。

6.根据权利要求1所述的基于共享黑名单撤销JWT令牌实时生效的方法,其特征在于,步骤2中,所述黑名单记录包括用户ID或用户名,以及JWT令牌信息。

7.根据权利要求1所述的基于共享黑名单撤销JWT令牌实时生效的方法,其特征在于,步骤3中,所述认证服务端根据预设的非对称加密算法生成公私钥对。

8.根据权利要求1所述的基于共享黑名单撤销JWT令牌实时生效的方法,其特征在于,步骤4中,所述用户指的是用户使用计算机上的浏览器,或者是使用移动设备上的应用程序进行的访问;所述凭据为用户名和/或用户ID和/或密码和/或秘钥文和/或加密USB盘。

9.根据权利要求1所述的基于共享黑名单撤销JWT令牌实时生效的方法,其特征在于,步骤9中,所述撤销某个用户的令牌是指:认证服务直接撤销之前为某个用户签发的令牌,生成一个撤销令牌事件。

10.根据权利要求9所述的基于共享黑名单撤销JWT令牌实时生效的方法,其特征在于,所述的撤销令牌事件,其元数据信息包括事件类型、用户ID或用户名、令牌剩余有效时间。

说明书 :

基于共享黑名单撤销JWT令牌实时生效的方法

技术领域

[0001] 本发明涉及计算机安全技术,特别涉及基于共享黑名单撤销JWT令牌实时生效的方法的技术。

背景技术

[0002] JWT即JSON Web Token,是用于身份验证的用户凭据。JWT令牌是无状态的,这意味着不需要在服务器端存储Cookie和其他会话。JWT是目前保护API,即应用编程接口方面最先进的技术手段之一。通常平台端提供的服务至少有认证服务和业务服务。当用户使用其凭据访问和登录认证服务时,认证服务器端验证用户的凭据有效后,登录成功,使用自己的私钥加密和生成一个JWT令牌并返回给用户,然后用户的浏览器会将这个JWT令牌并进行本地存储。之后,已登录的用户会将后续请求发送到业务服务器上的受保护资源时,它必须在发送的请求报头中携带JWT令牌。业务服务器端通过公钥来验证用户请求中的JWT令牌是否有效,它不会把令牌发送到认证服务器端去验证。这样带来的好处是业务服务的无状态化,与认证服务实现了解耦和,有利于构建大规模的分布式集群。
[0003] 但这样也存在一个问题,当平台的管理员认为某个用户不合法或者使用期限到期,他即使在认证服务器端撤销了JWT令牌,但是业务服务器端仍然会认为JWT令牌是有效的。因为业务服务器端是根据JWT令牌中包含的有效期字段“exp”来判断其有效期的。业界常用的解决方案是缩短JWT令牌的有效期,比如缩短到5~10分钟。一旦JWT令牌过期,用户就得再次访问认证服务,以获取新的令牌。这样的方案仍然不够完美,它增加了认证服务的访问压力,而且即使撤销某用户的JWT令牌,此用户在几分钟内仍然有合法访问的权限。另外这种方案对于有需要长效JWT令牌的场景并不适合。

发明内容

[0004] 本发明的目的是提供一种基于共享黑名单撤销JWT令牌实时生效的方法,解决现有JWT技术在应用方面的不足。
[0005] 本发明解决其技术问题,采用的技术方案是:基于共享黑名单撤销JWT令牌实时生效的方法,包括如下步骤:
[0006] 步骤1、平台端分别启动认证服务和业务服务;
[0007] 步骤2、在平台端构建分布式缓存,存放黑名单记录;
[0008] 步骤3、认证服务端生成公私钥对,保存私钥在本地,将公钥发送给各个业务服务;
[0009] 步骤4、用户使用其凭据访问和登录平台端的认证服务;
[0010] 步骤5、认证服务端验证用户的凭据有效后,登录成功,使用私钥加密和生成一个JWT令牌并返回给用户;
[0011] 步骤6、用户使用JWT令牌访问各个业务服务端;
[0012] 步骤7、业务服务端访问黑名单缓存,看JWT令牌是否在黑名单中,如果在黑名单,则拒绝向用户端提供服务;如果不在黑名单,进入步骤8;
[0013] 步骤8、业务服务端向用户端提供服务;
[0014] 步骤9、平台管理员撤销某个用户的JWT令牌,将信息写入分布式缓存的黑名单记录中。
[0015] 具体的是,步骤1中,所述认证服务和业务服务均为平台端的接口服务,所述认证服务和业务服务的形式为RESTful API服务或远程过程调用服务。
[0016] 进一步的是,步骤1中,所述认证服务的承载服务器为单机或集群,所述业务服务的承载服务器为单机或集群。
[0017] 具体的是,步骤2中,所述分布式缓存为:与业务服务位于同一个主机,或独立成单独的主机,或独立成单独的主机集群。
[0018] 进一步的是,步骤2中,所述分布式缓存具体包括如下步骤:
[0019] 步骤201、利用内存作为存储黑名单数据的空间,在内存中划出一块区域作为存储区;
[0020] 步骤202、若部署的节点不止一台服务器,那么每个节点服务器的内存存储区需要实现实时的数据同步的功能、节点故障恢复及数据强一致性的功能;
[0021] 步骤203、若黑名单数据量比较大,超出了单个节点内存存储容量,那么该存储区还应有数据哈希分布的功能。
[0022] 具体的是,步骤2中,所述黑名单记录包括用户ID或用户名,以及JWT令牌信息。
[0023] 进一步的是,步骤3中,所述认证服务端根据预设的非对称加密算法生成公私钥对。
[0024] 具体的是,步骤4中,所述用户指的是用户使用计算机上的浏览器,或者是使用移动设备上的应用程序进行的访问;所述凭据为用户名和/或用户ID和/或密码和/或秘钥文和/或加密USB盘。
[0025] 进一步的是,步骤9中,所述撤销某个用户的令牌是指:认证服务直接撤销之前为某个用户签发的令牌,生成一个撤销令牌事件。
[0026] 具体的是,所述的撤销令牌事件,其元数据信息包括事件类型、用户ID或用户名、令牌剩余有效时间。
[0027] 本发明的有益效果是,通过上述基于共享黑名单撤销JWT令牌实时生效的方法,能够有效地降低认证服务的访问压力,从而节省承载认证服务的服务器硬件的资源,而且撤销JWT令牌能够近乎实时地生效,使得业务服务的访问更加安全,而且适应性也更广。

附图说明

[0028] 图1为本发明基于共享黑名单撤销JWT令牌实时生效的方法的流程图。

具体实施方式

[0029] 下面结合附图,详细描述本发明的技术方案。
[0030] 本发明所述基于共享黑名单撤销JWT令牌实时生效的方法,其流程图参见图1,其中,该方法包括如下具体步骤:
[0031] 步骤1、平台端分别启动认证服务和业务服务。
[0032] 其中,认证服务和业务服务都是平台端开放的接口服务,其实施的形式可以为RESTful API服务和RPC服务,RPC即为远程过程调用。
[0033] 认证服务的承载服务器可以是单机,也可以是集群的。
[0034] 业务服务可以是单个业务的服务,也可以是多个业务的服务,且业务服务的承载服务器同样可以是单机,也可以是集群的。
[0035] 上述所指的单机是指:物理服务器、逻辑服务器/虚拟服务器、或者是容器服务。
[0036] 步骤2、在平台端构建分布式缓存,存放黑名单记录。
[0037] 其中,分布式缓存可以根据业务实际需求的访问规模进行灵活调整,可以与业务服务位于同一个主机,也可以独立成单独的主机,甚至是独立成单独的主机集群。
[0038] 分布式缓存可以采用多种实现技术,具体可包括如下步骤:
[0039] 步骤201、利用内存作为存储黑名单数据的空间,在内存中划出一块区域作为存储区;
[0040] 步骤202、若部署的节点不止一台服务器,那么每个节点服务器的内存存储区需要实现近乎实时的数据同步的功能、应有节点故障恢复及数据强一致性的功能;
[0041] 步骤203、若黑名单数据量比较大,超出了单个节点内存存储容量,那么还应有数据哈希分布的功能。
[0042] 其中,黑名单记录包括用户ID或用户名,JWT令牌信息。
[0043] 步骤3、认证服务端生成公私钥对,保存私钥在本地,将公钥发送给各个业务服务。
[0044] 其中,认证服务端根据预设的非对称加密算法,构建和生成一付公钥/私钥对,私钥保存在认证服务端本地,公钥发送给各个业务服务端。
[0045] 将公钥发送给各个业务服务端,可以是认证服务端和业务服务端构建一个实时通信通道,认证服务端将公钥信息推送到各个业务服务端;也可以是利用各个业务服务端注册的回调信息,认证服务端通过Webhook的回调将公钥信息传回各个业务服务端。
[0046] 步骤4、用户使用其凭据访问和登录平台端的认证服务。
[0047] 其中,用户指的是用户使用计算机上的浏览器,或者是使用移动设备上的应用程序进行的访问。
[0048] 其中,凭据可以是凭据为用户名和/或用户ID和/或密码和/或秘钥文和/或加密USB盘等以上形式的组合。
[0049] 步骤5、认证服务端验证用户的凭据有效后,登录成功,使用自己的私钥加密和生成一个JWT令牌并返回给用户。
[0050] 其中,认证服务端对用户的凭据进行合法性验证,如通过验证,则用户登录成功。
[0051] 认证服务端对登录成功的用户,根据其访问信息,按照JWT规范,使用上面提到的私钥对JWT元数据信息进行签名,生成完整的JWT令牌。
[0052] 步骤6、用户使用JWT令牌访问各个业务服务端。
[0053] 步骤7、业务服务端访问黑名单缓存,看JWT令牌是否在黑名单中,如果在黑名单,则拒绝向用户端提供服务;如果不在黑名单,进入步骤8。
[0054] 其中,使用公钥对JWT令牌进行解密,并检查令牌的合法性和有效性。令牌合法且有效,则响应用户端的请求;令牌不合法或无效,则拒绝向用户端提供服务。
[0055] 检查令牌的合法性是指,业务服务端使用公钥对JWT令牌进行解密,若解密成功,表示令牌是真的,是合法的令牌。
[0056] 检查令牌的有效性是指,业务服务端检查解密后的JWT令牌的元数据,查看用户ID、令牌的有效期限等内容,以确定令牌是否有效。
[0057] 步骤8、业务服务端向用户端提供服务。
[0058] 步骤9、平台管理员撤销某个用户的令牌,将信息写入分布式缓存的黑名单记录中。
[0059] 其中,撤销某个用户的令牌是指,认证服务直接撤销之前为某个用户签发的令牌,生成一个撤销令牌事件。
[0060] 撤销令牌事件,其元数据信息包括但不限于事件类型、用户ID或用户名、令牌剩余有效时间等。
[0061] 将信息写入分布式缓存的黑名单记录中,黑名单记录会同步更新到各个缓存节点,近似于实时生效。
[0062] 在上述步骤6、7和8中,由于用户端访问业务服务端时,业务服务端需要先访问黑名单缓存确定令牌是否撤销,一旦撤销就拒绝提供服务。故本发明提供的方法近乎于实时生效。
[0063] 另外,本发明的令牌撤销事件中可以包含JWT令牌的立即撤销或定时撤销的信息,以便能灵活地适应复杂的业务需求。