Java生鲜电商平台-开放API接口签名验证(小程序/APP) (2)

Java生鲜电商平台-开放API接口签名验证(小程序/APP)

 

登陆和退出流程

后续请求

客户端

和上述开放平台的客户端行为类似,把AccessKey改为token即可。

服务端

Java生鲜电商平台-开放API接口签名验证(小程序/APP)


总结: 这个是目前第三方数据接口交互过程中常用的一些参数与使用示例,希望对大家有点帮助。          当然如果为了保证更加的安全,可以加上RSA,RSA2,AES等等加密方式,保证了数据的更加的安全,但是唯一的缺点是加密与解密比较耗费CPU的资源.

共同学习QQ群:793305035

接口安全问题

请求身份是否合法?

请求参数是否被篡改?

请求是否唯一?

AccessKey&SecretKey (开放平台) 请求身份

为开发者分配AccessKey(开发者标识,确保唯一)和SecretKey(用于接口加密,确保不易被穷举,生成算法不易被猜测)。

防止篡改

参数签名

按照请求参数名的字母升序排列非空请求参数(包含AccessKey),使用URL键值对的格式(即key1=value1&key2=value2…)拼接成字符串stringA;

在stringA最后拼接上Secretkey得到字符串stringSignTemp;

对stringSignTemp进行MD5运算,并将得到的字符串所有字符转换为大写,得到sign值。

请求携带参数AccessKey和Sign,只有拥有合法的身份AccessKey和正确的签名Sign才能放行。这样就解决了身份验证和参数篡改问题,即使请求参数被劫持,由于获取不到SecretKey(仅作本地加密使用,不参与网络传输),无法伪造合法的请求。

重放攻击

虽然解决了请求参数被篡改的隐患,但是还存在着重复使用请求参数伪造二次请求的隐患。timestamp+nonce方案nonce指唯一的随机字符串,用来标识每个被签名的请求。通过为每个请求提供一个唯一的标识符,服务器能够防止请求被多次使用(记录所有用过的nonce以阻止它们被二次使用)。然而,对服务器来说永久存储所有接收到的nonce的代价是非常大的。可以使用timestamp来优化nonce的存储。假设允许客户端和服务端最多能存在15分钟的时间差,同时追踪记录在服务端的nonce集合。当有新的请求进入时,首先检查携带的timestamp是否在15分钟内,如超出时间范围,则拒绝,然后查询携带的nonce,如存在已有集合,则拒绝。否则,记录该nonce,并删除集合内时间戳大于15分钟的nonce(可以使用redis的expire,新增nonce的同时设置它的超时失效时间为15分钟)。

实现

请求接口:?name=hello&home=world&work=java客户端

生成当前时间戳timestamp=now和唯一随机字符串nonce=random

按照请求参数名的字母升序排列非空请求参数(包含AccessKey)stringA="AccessKey=access&home=world&name=hello&work=java×tamp=now&nonce=random";

拼接密钥SecretKeystringSignTemp="AccessKey=access&home=world&name=hello&work=java×tamp=now&nonce=random&SecretKey=secret";

MD5并转换为大写sign=MD5(stringSignTemp).toUpperCase();

最终请求?name=hello&home=world&work=java×tamp=now&nonce=nonce&sign=sign;

服务端

图片

Token&AppKey(APP)

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zgjwpz.html