一种前后端分离数据安全交互的实现方法及系统与流程

文档序号:22685115发布日期:2020-10-28 12:50阅读:1062来源:国知局
一种前后端分离数据安全交互的实现方法及系统与流程

本发明涉及web应用技术领域,特别是涉及一种前后端分离数据安全交互的实现方法及系统。



背景技术:

目前,随着web应用技术的发展,传统互联网前后端耦合式的应用逐渐被前后端分离的web应用系统取代。传统web应用中,多采用session机制来维持会话以进行客户端和服务端的数据交互过程中的认证;而在前后端分离的架构下,前后端职责分离:前端处理页面逻辑,后端负责数据处理,前后端独立开发,不相互依赖,可同时进行开发,并且后端可以跨终端(平台)提供服务。在前后端分离的架构下,一般都是后端提供一系列的数据接口供多种前端调用,而这些接口通常是无状态的,暴露在复杂的互联网环境中,前后端数据的交互存在着被篡改和重放等重大安全问题。



技术实现要素:

为克服上述现有技术存在的不足,本发明之目的在于提供一种前后端分离数据安全交互的实现方法及系统,以解决现有web应用中前后端分离数据交互过程中安全性不足的问题。

为达上述目的,本发明提供一种前后端分离数据安全交互的实现方法,包括如下步骤:

步骤s1,后端根据前端的有效用户账号信息生成全局唯一标识凭证,并在该全局唯一标识凭证基础上,基于dh算法与前端交换密钥;

步骤s2,前端进行数据请求时,调用统一数据请求方法完成请求数据的准备以及签名的计算,并将生成的所述全局唯一标识凭证、签名、unix时间戳以及随机requestid加入请求中发送至后端;

步骤s3,后端于统一入口处拦截并校验请求,若拦截校验通过,则处理业务逻辑数据,并返回结果,若拦截校验未通过,则返回错误信息。

优选地,步骤s1进一步包括:

步骤s100,后端于接收到前端传递的有效用户账号信息时,根据该有效用户账号信息生成全局唯一标识凭证;

步骤s101,后端生成dh算法所需的私钥dh_private_key以及两个很大的质数p、g,使用dh算法计算后端公钥dh_public_key,并将生成的全局唯一标识凭证、质数p和g以及后端公钥dh_public_key返回给前端,同时后端将相关数据记录入库;

步骤s102,前端将返回的所述全局唯一标识凭证、质数p和g以及后端公钥dh_public_key存入客户端,并将前端私钥private_key存入客户端,基于所述前端私钥private_key以及后端返回的质数p、g计算前端公钥public_key;

步骤s103,前端利用所述全局唯一标识凭证,将前端公钥public_key发送至后端;

步骤s104,后端验证所述全局唯一标识凭证有效性,将所述全局唯一标识凭证与所述前端公钥public_key进行绑定入库,完成密钥交换。

优选地,所述后端公钥dh_public_key计算如下:

dh_public_key=(g^dh_private_key)%p。

优选地,所述前端公钥public_key计算如下:

public_key=(g^private_key)%p。

优选地,步骤s2进一步包括:

步骤s200,请求数据准备,在请求原始数据中增加一个随机字符串,通过参数'_'传递,并生成随机requestid,获取当前unix时间戳,以及提取将要发生的http请求中部分消息;

步骤s201,对请求数据进行摘要,生成请求摘要,得到签名signature;

步骤s202,调用统一数据请求方法将所述全局唯一标识凭证、签名signature、unix时间戳、requestid放入http请求的自定义的http头文件中,再将完整请求发送给后端。

优选地,于步骤s201中,将要参与计算摘要的元素用换行符拼接成签名原文,使用dh算法交换的共享密钥shared_key作为签名密钥,对所述签名原文进行hmac-sha256摘要,得到签名signature。

优选地,于步骤s201中,所述参与计算摘要的元素包括但不限于:

http动词;

http头content-type的值;

将要请求接口的uri;

前端接口数据产生的随机字符串;

当前的unix时间戳timestamp;

用于标记requestid产生的nonce。

优选地,所述共享密钥计算如下:

shared_key=(dh_public_key^private_key)%p。

优选地,步骤s3进一步包括:

步骤s300,校验所述全局唯一标识凭证的有效性;

步骤s301,验证requestid是否已经存在;

步骤s302,校验传递unix时间戳与服务器时间差;

步骤s303,计算出所述全局唯一标识凭证绑定的共享密钥,并按照步骤s201同样规则进行摘要签名计算,并将其与前端请求的签名比对;

步骤s304,上述处理过程任何一项校验不符合直接返回错误,全部校验通过视为合法请求,继续后续的业务数据处理。

为达到上述目的,本发明还提供一种前后端分离数据安全交互的实现系统,包括:

前端,通过调用登录接口,传递有效用户账号信息至后端,在获得后端生成的全局唯一标识凭证的基础上,采用dh算法与后端交换密钥,进行数据请求时,调用统一数据请求方法完成请求数据的准备以及签名的计算,并将生成的所述全局唯一标识凭证、签名、unix时间戳以及随机requestid加入请求中发送至后端;

后端,根据前端的有效用户账号信息生成全局唯一标识凭证,并在该全局唯一标识凭证基础上,基于dh算法与前端交换密钥,于接收到前端的数据请求时,于统一入口处拦截并校验请求,若拦截校验通过,则处理业务逻辑数据,并返回结果,若拦截校验未通过,则返回错误信息。

与现有技术相比,本发明一种前后端分离数据安全交互的实现方法及系统通过前端调用登录接口,传递有效用户账号信息至后端,在获得后端生成的全局唯一标识凭证的基础上,采用dh算法与后端交换密钥,并在进行数据请求时,调用统一数据请求方法完成请求数据的准备以及签名的计算,并将生成的所述全局唯一标识凭证、签名、unix时间戳以及随机requestid加入请求中发送至后端,后端于接收到前端的数据请求时,于统一入口处拦截并校验请求,若拦截校验通过,则处理业务逻辑数据,并返回结果,若拦截校验未通过,则返回错误信息,本发明使前后端分离数据交互的安全得以保证,无论是使用网络嗅探或安全测试工具进行拦截修改请求或请求重放,都不能通过后端校验,在几乎不影响系统数据传输效率的情况下,保证了应用数据传输的可靠性,极大提高了应用系统的安全性。

附图说明

图1为本发明一种前后端分离数据安全交互的实现方法的步骤流程图;

图2为本发明一种前后端分离数据安全交互的实现系统的系统架构图;

图3为本发明实施例中前后端分离数据安全交互的实现流程图。

具体实施方式

以下通过特定的具体实例并结合附图说明本发明的实施方式,本领域技术人员可由本说明书所揭示的内容轻易地了解本发明的其它优点与功效。本发明亦可通过其它不同的具体实例加以施行或应用,本说明书中的各项细节亦可基于不同观点与应用,在不背离本发明的精神下进行各种修饰与变更。

图1为本发明一种前后端分离数据安全交互的实现方法的步骤流程图。如图1所示,本发明一种前后端分离数据安全交互的实现方法,包括如下步骤:

步骤s1,后端根据前端的有效用户账号信息生成全局唯一标识凭证,并在该全局唯一标识凭证基础上,基于dh(diffie-hellman)算法与前端交换密钥。

具体地,步骤s1进一步包括:

步骤s100,后端于接收到前端传递的有效用户账号信息时,根据该有效用户账号信息生成全局唯一标识凭证。在本发明具体实施例中,所述用户账号信息包括但不限制于用户名及其唯一的随机串uuid、密码、当前unix时间戳等,具体地,所述全局唯一标识凭证采用hmac-sha256签名生成,其中参与签名的项包括:用户名、唯一的随机串uuid、当前unix时间戳t,较佳地,尽管产生重复uuid并造成凭证错误的几率极低,于步骤s100中,还将生成的全局唯一标识凭证和其他已有的全局唯一标识凭证比对,若已经存在,则按相同算法重新生成。也就是说,当前端调用登录接口,输入用户名和密码等用户账号信息传送至后端,后端会对接收的用户名和密码后进行验证,当验证为有效用户账号信息时,生成全局唯一标识凭证。

步骤s101,后端生成dh算法所需的私钥dh_private_key以及两个很大的质数p、g,使用所述dh算法计算后端公钥dh_public_key,并将生成的全局唯一标识凭证、质数p和g以及后端公钥dh_public_key返回给前端,同时后端将相关数据记录入库。在本发明具体实施例中,私钥dh_private_key采用随机生成的秘密自然数,质数p和g可通过欧拉筛法(线性筛)质数发生器来生成,为提升运行效率,可将原根‘g’设为2或5等较小的质数,后端公钥dh_public_key计算如下:

dh_public_key=(g^dh_private_key)%p

一般地,根据著名的离散对数问题,建议dh_private_key至少100位长,质数p则至少300位。

步骤s102,前端将返回的所述全局唯一标识凭证、质数p和g以及后端dh密钥(即后端公钥dh_public_key)存入客户端sessionstorage(sessionstorage内容仅浏览器当前窗口有效),并生成本地dh密钥(随机生成的秘密自然数),即前端私钥private_key,存入客户端sessionstorage,基于前端私钥private_key以及后端返回的质数p、g计算前端公钥public_key。在本发明具体实施例中,前端公钥public_key计算如下:

public_key=(g^private_key)%p

步骤s103,前端利用所述全局唯一标识凭证,将前端公钥public_key发送至后端。

步骤s104,后端接收到所述全局唯一标识凭证后验证所述全局唯一标识凭证有效性,将所述全局唯一标识凭证与前端公钥public_key进行绑定入库,完成密钥交换。

至此,以上步骤成功则完成了登录步骤,前端跳转到业务页面,可以进行后续数据api的请求

步骤s2,前端进行数据请求时,调用统一数据请求方法完成请求数据的准备以及签名的计算,并将数据请求发送给后端。

具体地,步骤s2进一步包括:

步骤s200,请求数据准备。对请求数据准备如下:

1、规定所有请求数据都额外增加一个随机字符串,通过key为'_'的参数传递,传递形式和一般参数一样:key=value。具体地,在请求原始数据中增加参数:key为'_',value为随机生成的字符串,即额外多传递一个参数,这个参数的名字是’_’,其值为随机的字符串,例如,get请求,直接附加到httpquery中,如果是post、put等其他请求,则放到httpentity-body中,形如:_=xxxxxxxxxxx,而随机数的生成可例如:math.random().tostring(16).substr(2)

2、生成随机requestid,用nonce标识;

3、获取当前unix时间戳,用timestamp标识;

4、提取将要发生的http请求中部分消息:http动词、http头content-type、请求的uri。

步骤s201,对请求数据进行摘要,生成请求摘要:将要参与计算摘要的元素用换行符拼接成签名原文,使用dh算法交换的共享密钥shared_key作为签名密钥(secretkey),对签名原文进行hmac-sha256摘要,得到签名。在本发明具体实施例中,摘要计算元素包括如下:

1、http动词

2、http头content-type的值

3、将要请求接口的uri

4、前端接口数据产生的随机字符串

5、当前的unix时间戳timestamp

6、用于标记requestid的产生的nonce

在本发明具体实施例中,拼接签名原文如下:

stringtosign=http-verb+"\n"+

content-type+"\n"+

request_uri+"\n"+

random-string+"\n"+

unix-timestamp+"\n"+

nonce

共享密钥如下:

shared_key=(dh_public_key^private_key)%p

计算签名如下:

signature=hmac-sha256(utf-8-encoding-of(stringtosign),

shared_key));

步骤s202,在业务数据交互时,前端调用统一数据请求方法将所述全局唯一标识凭证、签名signature、unix时间戳(unix-timestamp)、requestidnonce放入http请求的自定义的httpheader中,再将完整请求发送给后端。

步骤s3,后端于统一入口处拦截并校验请求,若拦截校验通过,则处理业务逻辑数据,并返回结果,若拦截校验未通过,则返回错误信息。

具体地,步骤s3进一步包括:

步骤s300,校验所述全局唯一标识凭证的有效性;

步骤s301,验证requestidnonce的值,如果已经存在,则为重放请求,校验不通过;

步骤s302,校验传递unix时间戳与服务器时间差,相差较大视为无效请求,校验不符合;

步骤s303,计算出所述全局唯一标识凭证绑定的共享密钥,并按照步骤s201同样规则进行摘要签名计算(与s201不同之处在于shared_key的计算方式为:shared_key=(public_key^dh_private_key)%p),并将其与前端signature比对,如果不一致则为篡改;

步骤s304,上述处理过程任何一项校验不符合直接返回错误,全部校验通过视为合法请求,继续后续的业务数据处理。

图2为本发明一种前后端分离数据安全交互的实现系统的系统架构图。如图2所示,本发明一种前后端分离数据安全交互的实现系统,包括:

前端20,通过调用登录接口,传递有效用户账号信息至后端21,在获得后端21生成的全局唯一标识凭证的基础上,采用dh(diffie-hellman)算法与后端交换密钥,进行数据请求时,调用统一数据请求方法完成请求数据的准备以及签名的计算,并将数据请求发送给后端。

后端21,根据前端的有效用户账号信息生成全局唯一标识凭证,并在该全局唯一标识凭证基础上,基于dh(diffie-hellman)算法与前端交换密钥,于接收到前端20的数据请求时,于统一入口处拦截并校验请求,若拦截校验通过,则处理业务逻辑数据,并返回结果,若拦截校验未通过,则返回错误信息。

具体地,前端20进一步包括:

登录模块201,用于调用登录接口,获取用户输入的用户名和密码发送至后端21。

前端密钥交换处理模块202,用于获取后端返回的全局唯一标识凭证、质数p和g以及后端dh密钥(即后端公钥dh_public_key),并存入客户端sessionstorage(sessionstorage内容仅浏览器当前窗口有效),并生成本地dh密钥,即前端私钥private_key存入客户端sessionstorage,基于前端私钥private_key以及后端返回的质数p、g计算前端公钥public_key,并利用所述全局唯一标识凭证,将前端公钥public_key发送至后端。在本发明具体实施例中,前端公钥public_key计算如下:

public_key=(g^private_key)%p

数据请求模块203,用于在进行数据请求时,调用统一数据请求方法完成请求数据的准备以及签名的计算,并将数据请求发送给后端。

具体地,数据请求模块203进一步包括:

请求数据准备单元2031,用于请求数据准备。请求数据准备单元2031对请求数据准备如下:

1、规定所有请求数据都额外增加一个随机字符串,通过参数'_'传递。具体地,在请求原始数据中额外多传递一个参数,这个参数的名字是’_’,其值为随机的字符串

2、生成随机requestid,用nonce标识;

3、获取当前unix时间戳,用timestamp标识;

4、提取将要发生的http请求中部分消息:http动词、http头content-type、请求的uri。

请求摘要生成单元2032,用于对请求数据进行摘要,生成请求摘要:将要参与计算摘要的元素用换行符拼接成签名原文,使用dh算法交换的共享密钥shared_key作为签名密钥(secretkey),对签名原文进行hmac-sha256摘要,得到签名。在本发明具体实施例中,摘要计算元素包括如下:

1、http动词

2、http头content-type的值

3、将要请求接口的uri

4、前端接口数据产生的随机字符串

5、当前的unix时间戳timestamp

6、用于标记requestid的产生的nonce

在本发明具体实施例中,拼接签名原文如下:

stringtosign=http-verb+"\n"+

content-type+"\n"+

request_uri+"\n"+

random-string+"\n"+

unix-timestamp+"\n"+

nonce

共享密钥如下:

shared_key=(dh_public_key^private_key)%p

计算签名如下:

signature=hmac-sha256(utf-8-encoding-of(stringtosign),

shared_key));

请求发送单元2033,用于在业务数据交互时,调用统一数据请求方法将所述全局唯一标识凭证、签名signature、unix时间戳(unix-timestamp)、requestidnonce放入http请求的自定义的httpheader中,再将完整请求发送给后端21后端21进一步包括:

凭证生成模块210,用于在接收到前端传递的有效用户账号信息时,根据该有效用户账号信息生成全局唯一标识凭证。在本发明具体实施例中,所述用户账号信息包括但不限制于用户名及其唯一的随机串uuid、密码、当前unix时间戳等,具体地,所述全局唯一标识凭证采用hmac-sha256签名生成,其中参与签名的项包括:用户名、唯一的随机串uuid、当前unix时间戳t,较佳地,尽管产生重复uuid并造成凭证错误的几率极低,凭证生成模块210还将生成的全局唯一标识凭证和其他已有的全局唯一标识凭证比对,若已经存在,则按相同算法重新生成。也就是说,当前端调用登录接口,输入用户名和密码等用户账号信息传送至后端,后端会对接收的用户名和密码后进行验证,当验证为有效用户账号信息时,凭证生成模块210生成全局唯一标识凭证。

后端密钥交换处理模块211,用于生成dh算法所需的私钥dh_private_key以及两个很大的质数p、g,使用dh算法计算后端公钥dh_public_key,并将生成的全局唯一标识凭证、质数p和g以及后端公钥dh_public_key返回给前端,同时后端将相关数据记录入库,于接收到前端利用所述全局唯一标识凭证发送的前端公钥public_key时,验证所述全局唯一标识凭证有效性,将所述全局唯一标识凭证与前端公钥public_key进行绑定入库,完成密钥交换。在本发明具体实施例中,私钥dh_private_key采用随机生成的秘密自然数,质数p和g可通过欧拉筛法(线性筛)质数发生器来生成,为提升运行效率,可将原根‘g’设为2或5等较小的质数,后端公钥dh_public_key计算如下:

dh_public_key=(g^dh_private_key)%p

一般根据著名的离散对数问题,建议dh_private_key至少100位长,质数p至少300位。

请求处理模块212,用于在后端统一入口处拦截并校验请求,若拦截校验通过,则处理业务逻辑数据,并返回结果,若拦截校验未通过,则返回错误信息。

具体地,请求处理模块212进一步包括:

凭证校验单元2120,用于校验所述全局唯一标识凭证的有效性;

requestidnonce值验证单元2121,用于验证requestidnonce的值,如果已经存在,则为重放请求,校验不通过;

unix时间戳校验单元2122,用于校验传递unix时间戳与服务器时间差,相差较大视为无效请求,校验不符合;

签名校验单元2123,用于计算出所述全局唯一标识凭证绑定的共享密钥,并按照请求摘要生成单元2032同样规则进行摘要签名计算(不同之处在于shared_key的计算方式为:shared_key=(public_key^dh_private_key)%p)),并将其与前端签名比对,如果不一致则为篡改;

结果处理单元2124,当凭证校验单元2120、requestidnonce值验证单元2121、unix时间戳校验单元2122以及签名校验单元2123中任何一项校验不符合直接返回错误,全部校验通过视为合法请求,继续后续的业务数据处理。

实施例

图3为本发明实施例中前后端分离数据安全交互的实现流程图。如图3所示,本发明前后端分离数据安全交互的实现过程如下:

步骤1:前端登录,输入用户名和密码发送至后端。

步骤2:后端接收用户名和密码后进行验证,通过验证后,生成全局唯一标识凭证。

步骤3:后端生成dh算法所需的私钥dh_private_key以及两个很大的质数p、g,并使用dh算法计算公钥:dh_public_key=(g^dh_private_key)%p。

步骤4:后端将生成的凭证、质数p和g、公钥dh_public_key返回给前端,后端相关数据记录入库。

步骤5:前端将返回的凭证、公开大数p和g、后端dh密钥(公钥dh_public_key)存入客户端的sessionstorage,(sessionstorage内容仅浏览器当前窗口有效)。

步骤6:前端生成本地dh密钥(私钥private_key),存入本地sessionstorage;并基于后端返回的质数p、g计算前端公钥:public_key=(g^private_key)%p

步骤7:前端利用凭证,将前端公钥发送至后端。

步骤8:后端接收到凭证后验证凭证有效性,将凭证与前端公钥做绑定入库,完成密钥交换。

步骤9:前面步骤成功完成即完成了登录,前端跳转到业务页面,可以进行后续数据api的请求。

步骤10:前端进行数据请求时,调用统一的数据请求方法以保证安全交互。统一数据请求方法主要完成请求数据的准备以及签名的计算:

1)在请求原始数据中增加参数'_',内容为随机生成的字符串。

2)生成随机requestid,用nonce标识。

3)获取当前unix时间戳,用timestamp标识。

4)提取将要发生的http请求中部分消息:http动词、http头content-type、请求的uri

步骤11:前端生成请求摘要,将摘要元素的值拼接成摘要签名原文,使用dh算法交换的共享密钥作为签名secretkey,对签名原文进行hmac-sha256摘要,得到signature。

在本实施例中,签名原文拼接示意如下:

stringtosign=http-verb+"\n"+

content-type+"\n"+

request_uri+"\n"+

random-string+"\n"+

unix-timestamp+"\n"+

nonce

共享密钥计算如下:

shared_key=(dh_public_key^private_key)%p

计算签名如下:

signature=hmac-sha256(utf-8-encoding-of(stringtosign),

shared_key));

步骤11:前端统一数据请求方法将上述生成的内容放入http请求的自定义header中,分别为:authorization(凭证)、signature(签名)、timestamp(unix时间戳)、nonce;再将请求发送给后端。

步骤12:后端于统一入口处拦截并校验请求:

1)校验凭证的有效性;

2)验证requestid是否重放请求;

3)检验传递过来的时间戳timestamp与服务器时间差;

4)计算出与凭证对应的共享密钥,作为签名secretkey,用同样规则对请求做签名摘要,比对前后端签名是否一致。

步骤13:任何一项校验不符合直接返回错误,全部校验通过视为合法请求,拦截请求通过,处理业务逻辑数据,并返回结果。

步骤14:前端根据返回做出对应处理和响应。

上述步骤1~9为安全交互的准备阶段,准备阶段工作充分的基础上,所有前后端的数据交互执行步骤10~14即可完成数据安全交互。

综上所述,本发明一种前后端分离数据安全交互的实现方法及系统通过前端调用登录接口,传递有效用户账号信息至后端,在获得后端生成的全局唯一标识凭证的基础上,采用dh算法与后端交换密钥,并在进行数据请求时,调用统一数据请求方法完成请求数据的准备以及签名的计算,并将生成的所述全局唯一标识凭证、签名、unix时间戳以及随机requestid加入请求中发送至后端,后端于接收到前端的数据请求时,于统一入口处拦截并校验请求,若拦截校验通过,则处理业务逻辑数据,并返回结果,若拦截校验未通过,则返回错误信息,本发明使前后端分离数据交互的安全得以保证,无论是使用网络嗅探或安全测试工具进行拦截修改请求或请求重放,都不能通过后端校验,在几乎不影响系统数据传输效率的情况下,保证了应用数据传输的可靠性,极大提高了应用系统的安全性。

上述实施例仅例示性说明本发明的原理及其功效,而非用于限制本发明。任何本领域技术人员均可在不违背本发明的精神及范畴下,对上述实施例进行修饰与改变。因此,本发明的权利保护范围,应如权利要求书所列。

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