需要思考的问题
- 对于外部系统进行对接得时候为什么要进行鉴权
- 鉴权需要哪些准备工作
- 如何进行统一校验不用写重复得代码
概述
在为第三方系统提供接口的时候,肯定是要考虑接口数据安全问题
比如:
-
接口中数据是否有篡改,如果有大佬在你的接口数据中增加或者修改数据,那岂不是对业务系统造成不可避免的损失
-
请求是否已经超时。
-
请求是否重复提交等问题。
如何使做到统一校验:
- 使用spring web 拦截器
- 使用spring aop
本次就使用spring web 拦截器进行统一校验
设计思路
如何防止上述问题的出现呢 需要向数据发送方进行约定传入参数进行校验
因此在做接口主要解决如下几个问题:
- 请求发起必须是在规定的时间
- 请求发起方必须是授权的对象
- 请求不能重复发起
- 请求发送时参数不能被篡改
接口的设计
1. 第三方请求的合法性
- 需要向对方约定在headers中添加以下几个参数
- sign值:sign值说明在最后
- timestamp: 发送时间戳
- sn:未唯一请求值,对方系统可取随机数,不能重复
- appid:业务系统标识 线下提供appid 分配的 sate 值
- 接受方系统会校验次几项参数是否正确填写

2.单次请求失效性
接受方系统会校验发送方timestamp时间戳不得超过当前时间 360秒
//进行限制 如果当前时间 - 发送时间 > 3600 则认定超时
int time = 360;
long now = System.currentTimeMillis() / 1000;
if ((now - Long.valueOf(timeStamp)) > time) {
map.put("code", "ERROR");
map.put("message", "请求发起时间超过服务器规定得时间");
return map;
}
3.校验APPID 是否正确
接受方系统需要校验发送的APPID是否正确顺便取出需要得sate值

本文探讨了在外部系统对接中如何通过SpringWeb拦截器实现接口数据安全,包括参数校验、时间戳检查、APPID验证、请求重试检测和签名验证等措施,确保数据完整性和请求的唯一性。
最低0.47元/天 解锁文章
3880





