一种可控的前后端安全通信方法与流程

文档序号:23808542发布日期:2021-02-03 12:14阅读:48来源:国知局
一种可控的前后端安全通信方法与流程

[0001]
本发明涉及前后端鉴权技术领域,尤其涉及一种可控的前后端安全通信方法。


背景技术:

[0002]
目前前后端的鉴权方法较为流行的是token验证,其中jwt是基于token验证的一种使用广泛的鉴权协议。其中jwt鉴权关键在后端给前端返回一个带有用户信息的签名文件用于后续认证用户,请求时后端就只需要验证该签名文件是否有效,有效则直接使用签名文件内内容作为用户信息而无需维护用户状态和多次查库。但这样会导致以下三个问题,即请求api时请求的请求可被篡改、用户信息更新不可控和请求数据可被重复使用:
[0003]
1.请求可能被拦截后篡改发起错误请求。
[0004]
2.若后端需要对该用户的信息进行修改则必须要等待该签名文件过期下次发放签名文件的时候才能完成修改
[0005]
3.由于jwt请求的时候证书是不变的,当证书泄露后会导致用户的身份就可以被伪装造成严重的安全问题。


技术实现要素:

[0006]
本发明的目的在于提供一种可控的前后端安全通信方法,保证了请求api时,请求的不可篡改性、可控性和一次性。
[0007]
为实现上述目的,本发明提供了一种可控的前后端安全通信方法,包括以下步骤:
[0008]
对后端返回的rsa公钥进行签名验证,判断是否终止请求;
[0009]
通过设备辨识码和对应时间戳加密生成aes密钥,并结合登录信息整合成字符串后,加密传输至所述后端;
[0010]
利用对应的rsa私钥进行解密,并将获取的数据进行查库对比,同时利用所述aes密钥加密用户数字证书后返回给前端保存;
[0011]
将所述用户数字证书、当前时间戳和签名整合成字符串后,编码加密生成用户token;
[0012]
对接收到的所述用户token进行解密,并分别对解析后的所有数据进行对比验证,判断是否终止请求;
[0013]
根据未过期所述用户数字证书的用户信息是否需要更新,判断是否需要更新所述用户数字证书。
[0014]
其中,通过设备辨识码和对应时间戳加密生成aes密钥,并结合登录信息整合成字符串后,加密传输至所述后端,包括:
[0015]
通过生成算法生成设备辨识码,并与对应时间戳拼接后生成aes密钥原文,利用随机生成的盐值对所述aes密钥原文进行加密,将得到的aes密钥结合获取的登录信息,利用所述rsa公钥对生成的字符串加密,并将得到的密文传输至所述后端对应的接口。
[0016]
其中,利用对应的rsa私钥进行解密,并将获取的数据进行查库对比,同时利用所
述aes密钥加密用户数字证书后返回给前端保存,包括:
[0017]
利用rsa私钥对所述密文进行解密,同时对所述字符串进行解析,将解析得到的所述登录信息进行查库对比,然后利用所述rsa私钥将比对成功得到的数据进行签名,并利用所述aes密钥进行对称加密,将得到的用户数字证书回传至前端进行解密保存,完成登录。
[0018]
其中,将所述用户数字证书、当前时间戳和签名整合成字符串后,编码加密生成用户token,包括:
[0019]
对获取的请求信息内所有数据按键名进行字典排序,并使用base64编码,同时将使用md5生成的信息概要作为对应的请求签名,然后结合当前时间戳和所述用户数字证书,利用所述rsa公钥对base64编码得到的token密文原文进行加密,得到对应的用户token。
[0020]
其中,根据未过期所述用户数字证书的用户信息是否需要更新,判断是否需要更新所述用户数字证书,包括:
[0021]
若远程服务字典判断未过期所述用户数字证书内用户信息需要更新,则在返回所述用户数字证书时,发出拉取最新数字证书信号;
[0022]
若远程服务字典判断未过期所述用户数字证书内用户信息无需更新,则在返回所述用户数字证书时,发出无需更新信号。
[0023]
其中,根据未过期所述用户数字证书的用户信息是否需要更新,判断是否需要更新所述用户数字证书,还包括:
[0024]
根据所述远程服务字典内的数据判断用户数据是否有更新,并当所述用户数据需要更新时,所述前端根据所述拉取最新数字证书信号判断是否拉取所述用户数字证书。
[0025]
其中,所述方法还包括:
[0026]
根据返回的所述结果判断是否需要更新所述用户数字证书,若所述用户数字证书过期,重复登录流程;若用户信息有更新,则请求后端对应接口获取对应的所述用户数字证书;若不需要更新所述用户数字证书,则完成对应请求。
[0027]
本发明的一种可控的前后端安全通信方法,对后端返回的rsa公钥进行签名验证,判断是否终止请求;通过设备辨识码和对应时间戳加密生成aes密钥,并结合登录信息整合成字符串后,加密传输至所述后端;利用对应的rsa私钥进行解密,并将获取的数据进行查库对比,同时利用所述aes密钥加密用户数字证书后返回给前端保存;将所述用户数字证书、当前时间戳和签名整合成字符串后,编码加密生成用户token;对接收到的所述用户token进行解密,并分别对解析后的所有数据进行对比验证,判断是否终止请求;根据未过期所述用户数字证书的用户信息是否需要更新,判断是否需要更新所述用户数字证书,完成对应的请求,保证了请求api时,请求的不可篡改性、可控性和一次性。
附图说明
[0028]
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
[0029]
图1是本发明提供的一种可控的前后端安全通信方法的步骤示意图。
[0030]
图2是本发明提供的登录流程示意图。
[0031]
图3是本发明提供的请求流程示意图。
具体实施方式
[0032]
下面详细描述本发明的实施例,所述实施例的示例在附图中示出,其中自始至终相同或类似的标号表示相同或类似的元件或具有相同或类似功能的元件。下面通过参考附图描述的实施例是示例性的,旨在用于解释本发明,而不能理解为对本发明的限制。
[0033]
在本发明的描述中,“多个”的含义是两个或两个以上,除非另有明确具体的限定。
[0034]
请参阅图1,本发明提供一种可控的前后端安全通信方法,包括以下步骤:
[0035]
s101、对后端返回的rsa公钥进行签名验证,判断是否终止请求。
[0036]
具体的,如图2所示,前端在发起登录请求前,首先向后端指定api接口发起请求,等待后端返回带有签名的rsa公钥(非对称加密公钥)。
[0037]
然后,前端用本地的证书对该rsa公钥进行签名验证,若签名验证成功,则将该rsa公钥作为后续请求加密密钥保存到本地,若签名验证失败,则说明rsa公钥被篡改或发生错误,中止后续请求。对后端返回的rsa公钥进行签名认证,确保该rsa公钥是由后端签名分发的,避免了请求被劫持导致使用了错误的rsa公钥对隐私数据加密导致数据被解密。
[0038]
s102、通过设备辨识码和对应时间戳加密生成aes密钥,并结合登录信息整合成字符串后,加密传输至所述后端。
[0039]
具体的,前端通过uuid(通用唯一识别码)生成算法生成设备唯一辨识码,然后和当前对应时间戳拼接后生成aes密钥原文,再随机生成一个6位的salt(盐值)后对所述aes密钥原文进行md5(一种信息摘要算法)加盐加密生成aes密钥(对称加密公钥)。前端将用户输入的登录信息(如账号密码等)和得到的aes密钥通过对应api(接口)混合成一个对象,再通过对应api将对象转为json(一种数据交换格式)字符串的方式生成json字符串,并使用rsa公钥加密该json字符串生成密文;最后将生成的密文作为数据传递给后端api接口。
[0040]
s103、利用对应的rsa私钥进行解密,并将获取的数据进行查库对比,同时利用所述aes密钥加密用户数字证书后返回给前端保存。
[0041]
具体的,后端通过rsa私钥对接收的所述密文进行解密,若解密成功,则对json字符串进行json数据解析获取到aes加密密钥和用户信息登录;若解密失败,则直接返回错误提醒前端重新获取rsa公钥;其中,进行json数据解析采用的是对应语言的api,如php的json_decode方法就能将json字符串转为php的对象,这部分都是借助编程语言的api。
[0042]
后端对用户信息进行查库比对,采用的方法是获取到账户名和密码的明文后再使用数据库中的salt对密码明文进行加盐md5(一种消息摘要算法)加密,再判断结果和数据库中储存的密码密文是否一致,若一致则认为比对成功;若比对成功,则生成用户信息相关(如用户id、用户权限等数据)和签名过期时间的json字符串,使用rsa私钥对该json数据进行签名作为用户的数字证书;若比对失败,则返回错误提醒用户检查用户名和密码等用户信息。接着利用所述aes密钥对称加密的得到的用户数字证书,并返回至前端,当前端接收到所述用户数字证书后,利用aes密钥对后端返回的结果进行解密获取用户数字证书,解密成功后,删除该aes密钥,并将用户数字证书保存到本地,完成登录流程。若解密失败,则认为请求出错。
[0043]
s104、将所述用户数字证书、当前时间戳和签名整合成字符串后,编码加密生成用
户token。
[0044]
具体的,如图3所示,前端将获取当前时间戳并将该时间戳和其他数据(指的是这次请求中除了用于鉴权的token(用户临时令牌)和时间戳数据外的所有请求数据。如前端向后端发起下单请求的时候传给后端的订单数据)写入到请求信息中,前端通过对请求信息内所有数据(指的是这次请求中除了用于鉴权的token外的所有请求数据。和上面的其他数据相比多了时间戳。如前端向后端发起下单请求的时候传给后端的订单数据。)按键名进行字典排序后使用base64(基于64个可打印字符来表示二进制数据的编码方式)编码,使用md5对其生成信息概要作为该次请求的sign(签名)。如果该次请求的任意数据被篡改,则后端处理该次请求时计算所得的sign(签名)和token内的sign不同,则后端认为该次请求被篡改从而中止请求,避免了被篡改的请求被执行。而且该sign(签名)无法被伪造,因为sign被保存在token密文内传输,token密文通过rsa公钥非对称加密,只有后端有私钥可以解密,其他人无法获取到其中数据,故无法篡改。
[0045]
前端读取本地数字证书后和上述获取到的时间戳和生成的sign(签名),通过算法整合为一个json字符串后使用base64对其编码生成用户token密文原文,并使用登录流程中获取到的rsa公钥加密生成用户token。生成了使用rsa公钥非对称加密的token密文,该密文只有后端才能解密,同时该密文内保存有时间戳、用户数字证书和sing(签名)数据,其中,时间戳会随时间变化,sign会和请求的内容相关,这就导致了token原文一定是不会重复的,生成的token密文也是不会重复的,也就是说生成的token密文只适用于该次请求,用在其他请求上是无法正常完成请求的。即该token密文是一次性的,只能用于一次请求,即使拦截到了请求数据,也无法使用该token发起其他请求,保证了请求的一次性。
[0046]
s105、对接收到的所述用户token进行解密,并分别对解析后的所有数据进行对比验证,判断是否终止请求。
[0047]
具体的,前端会将生成的token写入到该次http(超文本传输协议)请求头的鉴权字段内,然后将时间戳和其他数据放入到该次请求的请求体内一起发送给所述后端。
[0048]
首先,后端使用rsa私钥对token数据进行解密,获取到base64编码数据,将其解码后获取到包含用户数字证书、时间戳和请求签名的json字符串。
[0049]
接着,后端将获取到的json字符串进行解析,获取到用户的数字证书、时间戳和sign(签名)信息。并对用户数字证书使用rsa私钥验签,若验证成功则进入步骤1;若失败则返回错误中止请求。
[0050]
步骤1,后端对请求信息内所有数据按键名进行字典排序后进行base64编码,然后使用md5对其生成信息概要后和用户token内的sign数据进行比对,若比对相同则进入步骤2,若比对不相同,则认为该次请求参数被篡改返回错误中止请求。
[0051]
步骤2,后端解析获取到的时间戳信息和这次请求的时间戳信息进行比对,若解析获取到的时间戳和当前时间相差在60秒内,则进入步骤3,若时间相差60秒外,则认为该请求过期返回错误并中断请求。
[0052]
步骤3,后端检查redis内是否缓存有该次请求的token的md5生成的信息概要,若有该缓存,则说明该token已被使用,则返回错误中断请求,否则将该token进行md5加密生成信息概要存入redis内缓存60秒。
[0053]
s106、根据未过期所述用户数字证书的用户信息是否需要更新,判断是否需要更
新所述用户数字证书。
[0054]
具体的,后端对获取到的所述用户数字证书判断是否过期,若该用户数字证书已经过期,则返回错误提醒用户重新登录;若未过期,则判断redis(远程服务字典)内是否有用户信息更新缓存。
[0055]
后端根据所述用户数字证书内的用户信息(如用户id)查询redis内是否内用户信息需要更新,若有该缓存,则在返回时,发出拉取最新数字证书信号,提醒前端调用指定接口获取最新数字证书,通知用户请求最新数字证书,若无该缓存,则返回结果时,发出无需更新信号,提醒用户无需更新。
[0056]
同时,判断用户数据是否有更新,若用户数据有更新,则使用redis内缓存的最新的用户信息处理对应用户请求的逻辑内容;若用户数据没有更新,则使用解析到的所述用户数字证书内的用户信息处理用户请求的逻辑内容,完成该次用户请求,并返回对应结果。通过redis来判断用户数据是否有更新,有的话就会使用redis内缓存的最新的用户数据进行请求处理而不是只使用数字证书内内容进行,避免了后端用户数据更新后数字证书内容没有更新导致的不可控性。同时后端在发现用户信息需要更新时也会在返回结果时提醒前端去拉取最新证书,保证前端及时更新到最新证书。
[0057]
前端首先根据返回结果判断是否需要更新所述用户数字证书和所述用户数字证书是否过期,若所述用户数字证书过期,则重复登录流程;若用户信息有更新,则请求最新数字证书;若不需要更新所述用户数字证书,则完成该次请求。
[0058]
本发明的一种可控的前后端安全通信方法,对后端返回的rsa公钥进行签名验证,判断是否终止请求;通过设备辨识码和对应时间戳加密生成aes密钥,并结合登录信息整合成字符串后,加密传输至所述后端;利用对应的rsa私钥进行解密,并将获取的数据进行查库对比,同时利用所述aes密钥加密用户数字证书后返回给前端保存;将所述用户数字证书、当前时间戳和签名整合成字符串后,编码加密生成用户token;对接收到的所述用户token进行解密,并分别对解析后的所有数据进行对比验证,判断是否终止请求;根据未过期所述用户数字证书的用户信息是否需要更新,判断是否需要更新所述用户数字证书,完成对应的请求,保证了请求api时,请求的不可篡改性、可控性和一次性。
[0059]
以上所揭露的仅为本发明一种较佳实施例而已,当然不能以此来限定本发明之权利范围,本领域普通技术人员可以理解实现上述实施例的全部或部分流程,并依本发明权利要求所作的等同变化,仍属于发明所涵盖的范围。
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1