一种身份认证方法及装置
文献发布时间:2023-06-19 16:09:34
技术领域
本申请涉及通信领域,更具体地说,涉及一种身份认证方法及装置。
背景技术
目前,在大多数项目、系统中都会涉及到身份认证以及会话管理的需求,实现机制主要可以分为两类:基于session身份认证和基于token的身份认证。基于session身份认证可能会出现内存耗费以及网络开销较大的问题;而基于token的身份认证可能会存在安全性低及用户体验较差等问题。
目前现有技术是采用一种基于jwt的身份认证方法来解决上述问题,然而由于该方法中是通过在原jwt令牌后面拼接一段一次性口令字符串,由服务器根据该一次性口令串来验证客户端的身份,所以该方法容易导致jwt令牌被盗用和篡改,从而导致身份认证的安全性和有效性大大降低。
发明内容
本申请实施例提供了一种身份认证方法及装置,能够通过对jwt令牌进行加密,避免了jwt令牌被盗用和篡改,从而提高身份认证的安全性和有效性。
有鉴于此,本申请实施例提供了一种身份认证方法,包括:
接收客户端发送的资源请求,所述资源请求包括jwt加密令牌,所述jwt加密令牌预先由服务器使用非对称密钥对中的公钥进行加密得到;
使用所述非对称密钥对中的私钥对所述jwt加密令牌进行解密,得到解密后的jwt令牌;
对所述解密后的jwt令牌进行验证,得到验证结果;
若所述验证结果为有效,向客户端返回与所述资源请求对应的资源信息。
可选地,在所述接收客户端发送的资源请求之前,所述方法还包括:
接收客户端的登录请求,所述登录请求包括用户信息;
根据所述用户信息生成jwt令牌,所述jwt令牌包括随机状态位、IP信息以及失效时间;
使用所述非对称密钥对中的公钥对所述jwt令牌进行加密,得到所述jwt加密令牌;
将所述jwt加密令牌返回至所述客户端。
可选地,所述对所述解密后的jwt令牌进行验证,得到验证结果,包括:
根据所述失效时间与系统时间,判断所述解密后的jwt令牌是否过期;
若所述解密后的jwt令牌过期,则所述验证结果为失效;
若所述解密后的jwt令牌未过期,判断所述解密后的jwt令牌中的IP信息与所述资源请求中携带的IP信息是否一致;
若所述解密后的jwt令牌中的IP信息与所述资源请求中携带的IP信息不一致,则所述验证结果为失效;
若所述解密后的jwt令牌中的IP信息与所述资源请求中携带的IP信息一致,判断所述随机状态位是否存在于预设的状态位表中;
若所述随机状态位不存在于预设的状态位表中,则所述验证结果为失效;
若所述随机状态位存在于预设的状态位表中,则所诉验证结果为有效。
可选地,在所述接收客户端发送的资源请求之前,所述方法还包括:
接收客户端的登录请求,所述登录请求包括用户信息;
根据所述用户信息生成初始jwt令牌,所述初始jwt令牌包括随机状态位、IP信息以及失效时间;
在所述初始jwt令牌上拼接刷新时间字符串,得到jwt令牌;
使用所述公钥对所述jwt令牌进行加密,得到所述jwt加密令牌;
将所述jwt加密令牌返回至所述客户端。
可选地,所述方法还包括:
根据所述刷新时间字符串与系统时间,判断所述解密后的jwt令牌是否处于有效期内;
若所述解决后的jwt令牌不在有效期内,返回执行所述根据用户信息生成初始jwt令牌的步骤。
本申请实施例还提供了一种身份认证装置,包括:
第一接收单元,用于接收客户端发送的资源请求,所述资源请求包括jwt加密令牌,所述jwt加密令牌预先由服务器使用非对称密钥对中的公钥进行加密得到;
解密单元,用于使用所述非对称密钥对中的私钥对所述jwt加密令牌进行解密,得到解密后的jwt令牌;
验证单元,用于对所述解密后的jwt令牌进行验证,得到验证结果;
第一返回单元,用于若所述验证结果为有效,向客户端返回与所述资源请求对应的资源信息。
可选地,所述装置还包括:
第二接收单元,用于接收客户端的登录请求,所述登录请求包括用户信息;
生成单元,用于根据所述用户信息生成jwt令牌,所述jwt令牌包括随机状态位、IP信息以及失效时间;
加密单元,用于使用所述非对称密钥对中的公钥对所述jwt令牌进行加密,得到所述jwt加密令牌;
第二返回单元,用于将所述jwt加密令牌返回至所述客户端。
可选地,所述验证单元具体用于:
根据所述失效时间与系统时间,判断所述解密后的jwt令牌是否过期;
若所述解密后的jwt令牌过期,则所述验证结果为失效;
若所述解密后的jwt令牌未过期,判断所述解密后的jwt令牌中的IP信息与所述资源请求中携带的IP信息是否一致;
若所述解密后的jwt令牌中的IP信息与所述资源请求中携带的IP信息不一致,则所述验证结果为失效;
若所述解密后的jwt令牌中的IP信息与所述资源请求中携带的IP信息一致,判断所述随机状态位是否存在于预设的状态位表中;
若所述随机状态位不存在于预设的状态位表中,则所述验证结果为失效;
若所述随机状态位存在于预设的状态位表中,则所诉验证结果为有效。
可选地,所述装置还包括:
第二接收单元,用于接收客户端的登录请求,所述登录请求包括用户信息;
生成单元,用于根据所述用户信息生成初始jwt令牌,所述初始jwt令牌包括随机状态位、IP信息以及失效时间;
拼接单元,用于在所述初始jwt令牌上拼接刷新时间字符串,得到jwt令牌;
加密单元,用于使用所述公钥对所述jwt令牌进行加密,得到所述jwt加密令牌;
第二返回单元,用于将所述jwt加密令牌返回至所述客户端。
可选地,所述装置还包括:
判断单元,用于根据所述刷新时间字符串与系统时间,判断所述解密后的jwt令牌是否处于有效期内;
执行单元,用于若所述解决后的jwt令牌不在有效期内,返回执行所述根据用户信息生成初始jwt令牌的步骤。
本申请实施例提供了一种身份认证方法,该方法包括接收客户端发送的资源请求,所述资源请求包括jwt加密令牌,所述jwt加密令牌预先由服务器使用非对称密钥对中的公钥进行加密;使用所述非对称密钥对中的私钥对所述jwt加密令牌进行解密,得到解密后的jwt令牌;对所述解密后的jwt令牌进行验证,得到验证结果;若所述验证结果为有效,向客户端返回与所述资源请求对应的资源信息。可见,本申请能够通过预先对生成的jwt令牌进行加密,避免了jwt令牌被盗用和篡改,从而提高身份认证的安全性和有效性。
附图说明
为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。
图1为本申请实施例提供的一种身份认证方法的流程示意图;
图2为本申请实施例提供的另一种身份认证方法的流程示意图;
图3为本申请实施例提供的另一种身份认证方法的流程示意图;
图4为本申请实施例提供的一种身份认证装置的结构示意图。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
本申请的说明书和权利要求书及上述附图中的术语“第一”、“第二”、“第三”“第四”等(如果存在)是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的实施例能够以除了在这里图示或描述的内容以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
首先对本申请可能涉及的部分名词进行解释:
1)JWT:是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准(RFC 7519)。该token被设计为紧凑且安全的。JWT的声明一般被用来在身份提供者和服务提供者间传递被认证的用户身份信息,以便于从资源服务器获取资源,也可以增加一些额外的其它业务逻辑所必须的声明信息。
2)session身份认证:在计算机中,尤其是在网络应用中,称为“会话控制”。Session对象存储特定用户会话所需的属性及配置信息。这样,当用户在应用程序的Web页之间跳转时,存储在Session对象中的变量将不会丢失,而是在整个用户会话中一直存在下去。当用户请求来自应用程序的Web页时,如果该用户还没有会话,则Web服务器将自动创建一个Session对象。当会话过期或被放弃后,服务器将终止该会话。Session对象最常见的一个用法就是存储用户的首选项。例如,如果用户指明不喜欢查看图形,就可以将该信息存储在Session对象中。有关使用Session对象的详细信息,请参阅“ASP应用程序”部分的“管理会话”。注意会话状态仅在支持cookie的浏览器中保留。
3)token身份认证:Token,指的是Oauth Token或类似的机制,提供的是认证和授权,认证是针对用户,授权是针对App。其目的是让某App有权利访问某用户的信息。这里的Token是唯一的。不可以转移到其它App上,也不可以转到其它用户上。JWT是token中的一种。
4)会话管理(session管理):会话是两个或更多个通信设备之间或计算机和用户之间的半永久性交互式信息交换,会话在某个时间点建立,然后在稍后的时间点拆除。建立的通信会话可以在每个方向上涉及多于一个消息,这些消息只存在这个会话中,而与其他会话隔离。会话通常是有状态的,这意味着至少一个通信部分需要保存关于会话历史的信息以便能够进行通信。
通常,在大多数项目、系统中都会涉及到身份认证以及会话管理的需求,如何以极小代价快速鉴别身份已经成为当今访问量较大且响应速度要求较快的项目、系统,尤其是大型项目、系统需要考虑以及解决的问题。
目前大部分系统可以大致分为两类,一类是集中式系统,该系统的特点是前后端一体且基于session身份认证。另外一类是前后端分离的系统,该系统的特点是使用后端进行集中处理且基于session身份认证。绝大部分系统使用的是前后端分离结构,后端服务大多基于session的身份认证。此外,对于微服务架构系统而言,通常基于token的身份认证。对于session的身份认证处理,服务器端往往对于每一个session都会花费一定的内存开销。因此,对于现阶段流行的后端多服务、分布式系统而言,需要处理session一致性问题(分布式系统存在多个节点,每个节点都得保存session才可能在同一用户访问不同节点时识别出该用户信息,从而访问资源),而这往往将会耗费更大的内存开销以及网络开销去同步节点之间的session信息。对于使用token的身份认证,微服务使用token认证机制,获取到的token往往只是一次性的,当token过期时,需要向微服务重新获取登录发送验证信息获取新的token,如果仅仅在微服务系统中,这种重复获取token的行为还勉强能让人接受,但是在前后端用户身份验证系统中,往往会存在安全性低及用户体验较差(每隔一段时间会话就会过期,需要重新登录)等问题。
目前现有技术是采用一种基于jwt的身份认证方法来解决上述问题,然而由于该方法中是通过在原jwt令牌后面拼接一段一次性口令字符串,由服务器根据该一次性口令串来验证客户端的身份,所以当盗用者拿着服务端生成返回的JWT令牌后,盗用者自己也可以在客户端上模拟请求服务端得到一次性口令,口令拼接在JWT令牌后面,类似于盗用者拿着被盗者的钥匙去操作,从而实现令牌盗用。并且当不法分子拿到jwt,通过特定手段,对算法签名进行篡改,或者未校验算法签名的对其进行直接篡改等,这往往可以绕过算法校验解析JWT,甚至可以通过JWT令牌重放去访问服务器资源。因此该方法容易导致jwt令牌被盗用和篡改,从而导致身份认证的安全性和有效性大大降低。
因此,针对上述问题,本申请实施例提供了一种身份认证方法,能够通过对jwt令牌进行加密,避免了jwt令牌被盗用和篡改,从而提高身份认证的安全性和有效性。以下对本申请实施例所提供的方法进行详细说明。
请参阅图1,本申请实施例所提供的一种身份认证方法包括以下步骤。
S101、接收客户端发送的资源请求。
本实施例中,客户端向服务器发送获取资源的资源请求。该资源请求中包括jwt加密令牌、所要获取的资源的标识信息、客户端的IP信息等。可以理解的是,jwt加密令牌可以是由服务器预先使用非对称密钥对中的公钥对jwt令牌进行加密得到的。非对称密钥对包括公钥和私钥,两者相互对应,存储于服务器中。具体地,服务器在生成jwt令牌后,可以使用自身存储的非对称密钥对中的公钥对jwt令牌进行加密,得到jwt加密令牌。
S102、使用所述非对称密钥对中的私钥对所述jwt加密令牌进行解密,得到jwt令牌。
本实施例中,服务器在获取客户端发送的资源请求中所携带的jwt加密令牌后,可以使用自身存储的非对称密钥对中的私钥对jwt加密令牌进行解密,从而得到解密后的jwt令牌。需要特别说明的是,用于解密jwt令牌的私钥是与用于加密jwt令牌的公钥相对应的。
S103、对所述解密后的jwt令牌进行验证,得到验证结果。
本实施例中,服务器在通过对jwt加密令牌进行解密得到解密后的jwt令牌后,可以对解密后的jwt令牌进行验证,得到验证结果。可以理解的是,若解密后的jwt令牌验证通过,则验证结果为有效;若解密后的jwt令牌验证失败,则验证结果为无效。进一步地,当验证结果为无效时,服务器可以向客户端返回令牌验证无效的信息。
具体地,jwt令牌中可以包括随机状态位state、IP信息以及失效时间。其中,随机状态位state用于判断jwt令牌是否被吊销;IP信息用于判断jwt令牌是否被盗用;失效时间用于判断jwt另外是否过期失效。
作为一种实施方式,上述S103具体可以为:
S1031、根据所述失效时间与系统时间,判断所述解密后的jwt令牌是否过期;若是,则所述验证结果为失效。
本实施例中,可以获取解密后的jwt令牌中携带的失效时间和服务器中的系统时间,并将两者进行比较,判断该jwt令牌中的失效时间是否早于服务器中的系统时间,若是,则说明该jwt令牌已过期,验证失败,验证结果为失效,服务器可以向客户端返回令牌验证无效的信息,同时提取该jwt令牌中的随机状态位state,并删除服务器中预存的随机状态位表中与该jwt令牌对应的随机状态位state的状态标识或者将其设置成负值,标识此令牌已失效。
S1032、若否,判断所述解密后的jwt令牌中的IP信息与所述资源请求中携带的IP信息是否一致;若否,则所述验证结果为失效。
本实施例中,在确定解密后的jwt令牌并未过期后,可以获取解密后的jwt令牌中携带的IP信息和资源请求中携带的IP信息,比较两者是否相同。若解密后的jwt令牌中携带的IP信息和资源请求中携带的IP信息不同,则说明此次请求不是来源于同一客户端,jwt令牌可能已经被不法分子盗用,验证结果为失效,服务器可以向客户端返回令牌验证无效的信息。
S1033、若是,判断所述随机状态位是否存在于预设的状态位表中;若否,则所述验证结果为失效;若是,则所述验证结果为有效。
本实施例中,若确定解密后的jwt令牌中的IP信息与资源请求中携带的IP信息一致,可以判断解密后的jwt令牌中携带的随机状态位state是否可以在服务器中预存的状态位表中查询的到,若查询不到,说明该随机状态位state可能已被服务器从预存的状态位表中删除,也即该jwt令牌已被吊销,该jwt令牌验证失败,验证结果为失效,服务器可以向客户端返回令牌验证无效的信息;若查询的到,则该jwt令牌验证成功,验证结果为有效。
S104、若所述验证结果为有效,向客户端返回与所述资源请求对应的资源信息。
本实施例中,若对解密后的jwt令牌进行验证得到的验证结果为有效,则服务器可以根据资源请求中携带的所要获取的资源的标识信息,向客户端返回与该资源请求对应的资源信息。
在本申请实施例中,通过接收客户端发送的资源请求,所述资源请求包括jwt加密令牌,所述jwt加密令牌预先由服务器使用非对称密钥对中的公钥进行加密;使用所述非对称密钥对中的私钥对所述jwt加密令牌进行解密,得到解密后的jwt令牌;对所述解密后的jwt令牌进行验证,得到验证结果;若所述验证结果为有效,向客户端返回与所述资源请求对应的资源信息。可见,本申请能够通过预先对生成的jwt令牌进行加密,避免了jwt令牌被盗用和篡改,从而提高身份认证的安全性和有效性。
请参阅图2,本申请还提供了另外一种身份认证方法,在上述步骤S101之前,还可以包括:
S201、接收客户端的登录请求。
本实施例中,服务器接收客户端发送的登录请求,其中登录请求可以包括用户名,账号密码、客户端的IP地址信息等用户信息。具体地,客户端可以先将用户名,账号密码等信息发送给代理服务器,再由代理服务器将用户名,账号密码以及获取到的客户端的IP地址信息结合成用户信息并转发给服务器。
S202、根据所述用户信息生成jwt令牌。
本实施例中,服务器在获取客户端发送的登录请求后,可以从登录请求中提取出客户端的IP地址信息等用户信息,并生成jwt令牌。具体地,服务器可以将登录请求携带的客户端的IP地址信息作为IP信息,放入jwt令牌的Playload中;还可以利用随机算法生成一个随机状态位state,放入jwt令牌的Playload中,并将生成的随机状态位state存入预设的随机状态位表中;还可以预设一个失效时间,放入jwt令牌的Playload中,使得生成的jwt令牌包括随机状态位state、IP信息以及失效时间。
S203、使用所述非对称密钥对中的公钥对所述jwt令牌进行加密,得到所述jwt加密令牌。
本实施例中,服务器在生成jwt令牌后,可以使用自身存储的非对称密钥对中的公钥以及非对称算法对jwt令牌进行加密,从而得到jwt加密令牌。可选的,服务器也可以使用其他的加密方式对生成的jwt令牌进行加密。
S204、将所述jwt加密令牌返回至所述客户端。
本实施例中,服务器在得到jwt加密令牌后,可以将jwt加密令牌放入响应消息中返回给客户端。
本申请实施例中,通过接收客户端的登录请求,所述登录请求包括用户信息;根据所述用户信息生成jwt令牌,所述jwt令牌包括随机状态位、IP信息以及失效时间;使用所述非对称密钥对中的公钥对所述jwt令牌进行加密,得到所述jwt加密令牌;将所述jwt加密令牌返回至所述客户端。可见,本申请能够通过对jwt令牌进行加密,避免了jwt令牌被盗用和篡改,从而提高身份认证的安全性和有效性。
请参阅图3,本申请实施例提供了另外一种身份认证方法,包括:
S301、客户端向服务器发送登录请求。
本实施例中,客户端向服务器发送登录请求,其中登录请求可以包括用户名,账号密码、客户端的IP地址信息等用户信息。具体地,客户端可以先将用户名,账号密码等信息发送给代理服务器,再由代理服务器将用户名,账号密码以及获取到的客户端的IP地址信息结合成用户信息并转发给服务器。
S302、服务器接收客户端发送的登录请求。
步骤S302的详细过程可以参见上述步骤S201的相关介绍,在此不再赘述。
S303、服务器根据用户信息生成初始jwt令牌。
本实施例中,服务器在获取客户端发送的登录请求后,可以从登录请求中提取出客户端的IP地址信息等用户信息,并生成初始jwt令牌。具体地,服务器可以将登录请求携带的客户端的IP地址信息作为IP信息,放入jwt令牌的Playload中;还可以利用随机算法生成一个随机状态位state,放入jwt令牌的Playload中,并将生成的随机状态位state存入预设的随机状态位表中;还可以预设一个失效时间,放入jwt令牌的Playload中,使得生成的初始jwt令牌包括随机状态位state、IP信息以及失效时间。
S304、服务器在所述初始jwt令牌上拼接刷新时间字符串,得到jwt令牌。
本实施例中,服务器在生成初始jwt令牌后,可以在初始jwt令牌上拼接一段刷新时间字符串,得到jwt令牌。可以理解的是,服务器可以根据需求,生成一个刷新时间,用于刷新jwt令牌,该刷新时间要小于jwt令牌的失效时间。服务器在生成刷新时间后,可以对其进行编码得到刷新时间字符串,然后将其作为初始jwt令牌的第四段拼接在初始jwt令牌上,得到jwt令牌。
S305、服务器使用所述公钥对所述jwt令牌进行加密,得到所述jwt加密令牌。
步骤S305的详细过程可以参见上述步骤S203的相关介绍,在此不再赘述。
S306、服务器将所述jwt加密令牌返回至所述客户端。
步骤S306的详细过程可以参见上述步骤S204的相关介绍,在此不再赘述。
S307、客户端接收所述jwt加密令牌。
本实施例中,客户端在接收到携带jwt加密令牌的响应消息后,可以提取出jwt加密令牌并缓存。
S308、客户端向服务器发送资源请求。
本实施例中,客户端向服务器发送获取资源的资源请求。该资源请求中包括jwt加密令牌、所要获取的资源的标识信息、客户端的IP信息等。可以理解的是,jwt加密令牌可以是由服务器预先使用非对称密钥对中的公钥对jwt令牌进行加密得到的。非对称密钥对包括公钥和私钥,两者相互对应,存储于服务器中。具体地,服务器在生成jwt令牌后,可以使用自身存储的非对称密钥对中的公钥对jwt令牌进行加密,得到jwt加密令牌。
S309、服务器接收客户端发送的资源请求。
步骤S309的详细过程可以参见上述步骤S101的相关介绍,在此不再赘述。
S310、服务器使用所述非对称密钥对中的私钥对所述jwt加密令牌进行解密,得到解密后的jwt令牌。
步骤S310的详细过程可以参见上述步骤S102的相关介绍,在此不再赘述。
S311、服务器判断所述解密后jwt令牌的格式是否符合格式要求。
本实施例中,服务器可以首先判断jwt令牌的格式是否符合预设的格式要求,若否,向服务器返回令牌验证失败的信息,若是,则可以进入下一个步骤。具体地,服务器可以判断解密后的jwt令牌是否符合四段式jwt令牌的格式。
S312、若是,服务器对所述解密后的jwt令牌进行验证,得到验证结果。
步骤S312的详细过程可以参见上述步骤S103的相关介绍,在此不再赘述。
S313、若所述验证结果为有效,服务器向客户端返回与所述资源请求对应的资源信息。
步骤S313的详细过程可以参见上述步骤S104的相关介绍,在此不再赘述。
S314、服务器根据刷新时间字符串与系统时间,判断解密后的jwt令牌是否处于有效期内。
本实施例中,服务器可以从解密后的jwt令牌中提取出刷新时间字符串,并对其进行解码获得jwt令牌的刷新时间,并获取服务器中的系统时间。判断jwt令牌的刷新时间是否大于系统时间,若是,说明该jwt令牌不在有效期内。若否,说明该jwt令牌处理有效期内。
S315、若否,服务器返回执行所述根据用户信息生成初始jwt令牌的步骤。
本实施例中,若jwt令牌不在有效期内,服务器可以返回执行根据用户信息生成初始jwt令牌的步骤,进而重新生成jwt加密令牌并返回给客户端。
S316、客户端判断是否接收到新的jwt加密令牌。
本实施例中,客户端在接收服务器返回的资源信息后,可以判断服务器是否有返回新的jwt加密令牌。
S317、若是,客户端删除原jwt加密令牌,并缓存新的jwt加密令牌。
本实施例中,客户端在确定服务器有返回新的jwt加密令牌后,删除客户端缓存的原jwt加密令牌,并缓存该新的jwt加密令牌。
可以理解的是,当客户端用户在有效期限内有进行操作,服务器可以根据当前请求的jwt加密令牌,生成一个全新的jwt加密令牌返回给客户端,客户端可以直接将原始jwt加密令牌替换成新的jwt加密令牌,以后每个请求带着新的jwt加密令牌去请求即可。对于用户使用体验,完全不知道jwt加密令牌已经被替换的事情,即jwt加密令牌会自动刷新,实现类似于session过期机制的功能,并且避免了refresh_token的越权安全漏洞的出现,实现无感刷新机制。
本申请实施例中,通过接收客户端发送的资源请求,所述资源请求包括jwt加密令牌,所述jwt加密令牌预先由服务器使用非对称密钥对中的公钥进行加密;使用所述非对称密钥对中的私钥对所述jwt加密令牌进行解密,得到解密后的jwt令牌;对所述解密后的jwt令牌进行验证,得到验证结果;若所述验证结果为有效,向客户端返回与所述资源请求对应的资源信息。可见,本申请能够通过预先对生成的jwt令牌进行加密,避免了jwt令牌被盗用和篡改,从而提高身份认证的安全性和有效性。
此外,本申请实施例还具有如下优点:
1)存储资源开销小。因为使用非对称加密技术对生成的jwt令牌加密,无论jwt令牌中加入多大的数据,加密后字符串长度会被压缩,所以每一个jwt令牌中携带的信息经过处理后大小会有一定删减,占用存储资源减小。
2)网络资源开销小。由于每一次客户端请求不同服务端,所以不需要解决session认证时的一致性问题(使用jwt令牌认证时无需关心存储问题,因为每一台机器都是通过约定的算法去解析jwt令牌获取认证信息),并且免去了重复且不必要的服务器请求以及数据库查询请求。
接下来对本申请提供的一种身份认证装置进行介绍,下文介绍的一种身份认证装置与上文介绍的一种身份认证方法可相互对应参照。
请参阅图4,本申请实施例提供了一种身份认证装置,包括:
第一接收单元401,用于接收客户端发送的资源请求,所述资源请求包括jwt加密令牌,所述jwt加密令牌预先由服务器使用非对称密钥对中的公钥进行加密得到;
解密单元402,用于使用所述非对称密钥对中的私钥对所述jwt加密令牌进行解密,得到解密后的jwt令牌;
验证单元403,用于对所述jwt解密后的令牌进行验证,得到验证结果;
第一返回单元404,用于若所述验证结果为有效,向客户端返回与所述资源请求对应的资源信息。
可选地,所述装置还包括:
第二接收单元,用于接收客户端的登录请求,所述登录请求包括用户信息;
生成单元,用于根据所述用户信息生成jwt令牌,所述jwt令牌包括随机状态位、IP信息以及失效时间;
加密单元,用于使用所述非对称密钥对中的公钥对所述jwt令牌进行加密,得到所述jwt加密令牌;
第二返回单元,用于将所述jwt加密令牌返回至所述客户端。
可选地,所述验证单元403,具体用于:
根据所述失效时间与系统时间,判断所述解密后的jwt令牌是否过期;
若是,则所述验证结果为失效;
若否,判断所述解密后的jwt令牌中的IP信息与所述资源请求中携带的IP信息是否一致;
若否,则所述验证结果为失效;
若是,判断所述随机状态位是否存在于预设的状态位表中;
若否,则所述验证结果为失效;
若是,则所述验证结果为有效。
可选地,所述装置还包括:
第二接收单元,用于接收客户端的登录请求,所述登录请求包括用户信息;
生成单元,用于根据所述用户信息生成初始jwt令牌,所述初始jwt令牌包括随机状态位、IP信息以及失效时间;
拼接单元,用于在所述初始jwt令牌上拼接刷新时间字符串,得到jwt令牌;
加密单元,用于使用所述公钥对所述jwt令牌进行加密,得到所述jwt加密令牌;
第二返回单元,用于将所述jwt加密令牌返回至所述客户端。
可选地,所述装置还包括:
判断单元,用于根据所述刷新时间字符串与系统时间,判断所述解密后的jwt令牌是否处于有效期内;
执行单元,用于若所述解决后的jwt令牌不在有效期内,返回执行所述根据用户信息生成初始jwt令牌的步骤。
本申请实施例中,通过接收客户端发送的资源请求,所述资源请求包括jwt加密令牌,所述jwt加密令牌预先由服务器使用非对称密钥对中的公钥进行加密;使用所述非对称密钥对中的私钥对所述jwt加密令牌进行解密,得到解密后的jwt令牌;对所述解密后的jwt令牌进行验证,得到验证结果;若所述验证结果为有效,向客户端返回与所述资源请求对应的资源信息。可见,本申请能够通过预先对生成的jwt令牌进行加密,避免了jwt令牌被盗用和篡改,从而提高身份认证的安全性和有效性。
最后,还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
对所公开的实施例的上述说明,使本领域技术人员能够实现或使用本发明。对这些实施例的多种修改对本领域技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本发明的精神或范围的情况下,在其它实施例中实现。因此,本发明将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。
- 身份认证方法、身份认证服务器和身份认证装置
- 身份认证方法、身份认证服务器和身份认证装置