前端怎么做接口签名验证 -baijiahao_阿里一面:如何保证API接口数据安全?
- 前后端分离的开发方式,我们以接口为标准来进行推动,定义好接口,各自开发自己的功能,最后进行联调整合。无论是开发原生的APP还是webapp还是PC端的软件,只要是前后端分离的模式,就避免不了调用后端提供的接口来进行业务交互。网页或者app,只要抓下包就可以清楚的知道这个请求获取到的数据,也可以伪造请求去获取或攻击服务器;也对爬虫工程师来说是一种福音,要抓你的数据简直轻而易举。那我们怎么去解决这些问题呢?
接口签名
我们先考虑一下接口数据被伪造,以及接口被重复调用的问题,要解决这个问题我们就要用到接口签名的方案,签名流程
签名规则
1、线下分配appid和appsecret,针对不同的调用方分配不同的appid和appsecret
2、加入timestamp(时间戳),5分钟内数据有效
3、加入临时流水号 nonce(防止重复提交),至少为10位。针对查询接口,流水号只用于日志落地,便于后期日志核查。针对办理类接口需校验流水号在有效期内的唯一性,以避免重复请求。
4、加入签名字段signature,所有数据的签名信息。
以上字段放在请求头中。
签名的生成
签名signature字段生成规则所有动态参数 = 请求头部分 + 请求URL地址 + 请求Request参数 + 请求Body
上面的动态参数以key-value的格式存储,并以key值正序排序,进行拼接
最后拼接的字符串 在拼接appSecretsignature = DigestUtils.md5DigestAsHex(sortParamsMap + appSecret)即拼接成一个字符串,然后做md5不可逆加密
请求头部分
请求头=“appId=xxxx&nonce=xxxx×tamp=xxxx&sign=xxx”请求头中的4个参数是必须要传的,否则直接报异常请求URL地址这个就是请求接口的地址包含协议,如https://mso.xxxx.com.cn/api/user请求Request参数即请求为Get方式的时候,获取的传入的参数请求Body即请求为Post时,请求体Body从request inputstream中获取保存为String形式签名算法实现基本原理其实也比较简单,就是自定义filter,对每个请求进行处理;整体流程如下1)验证必须的头部参数2)获取头部参数,request参数,Url请求路径,请求体Body,把这些值放入SortMap中进行排序3)对SortMap里面的值进行拼接4)对拼接的值进行加密,生成sign5)把生成的sign和前端传入的sign进行比较,如果不相同就返回错误
我们来看一下代码
1.@Componentpublic
2.public class SignAuthFilter extends OncePerRequestFilter{
3.static final String FAVICON = "/favicon.ico";
4.static final String PREFIX = "attack:signature:";
5.}
以上是filter类,其中有个appSecret需要自己业务去获取,它的作用主要是区分不同客户端app。并且利用获取到的appSecret参与到sign签名,保证了客户端的请求签名是由我们后台控制的,我们可以为不同的客户端颁发不同的appSecret。
我们再来看看验证头部参数
上图其实就是验证是否传入值;不过其实有个很重要的一点,就是对此请求进行时间验证,如果大于10分钟表示此链接已经超时,防止别人来到这个链接去请求。这个就是防止盗链。
我们在来看看,如何获取各个参数
上面我们获取了各个参数,相对比较简单;我们在来看看生成sign,和验证sign
上面的流程中,会有个额外的安全处理,· 防止盗链,我们可以让链接有失效时间· 利用nonce参数,防止重复提交
在签名验证成功后,判断是否重复提交;原理就是结合redis,判断是否已经提交过
总结今天我们用签名的方式,对我们对外提供的接口起到了保护作用;但这种保护仅仅做到了防止别人篡改请求,或者模拟请求。
但是还是缺少对数据自身的安全保护,即请求的参数和返回的数据都是有可能被别人拦截获取的,而这些数据又是明文的,所以只要被拦截,就能获得相应的业务数据。
老顾下一篇文章会介绍如何保证接口数据的安全,谢谢!!!
前端怎么做接口签名验证 -baijiahao_阿里一面:如何保证API接口数据安全?相关推荐
- nginx学习笔记002---Nginx代理配置_案例1_实现了对前端代码的方向代理_并且配置了后端api接口的访问地址
做个记录,以后做简单的nginx的时候拿过来就用 这个配置实现了,对前端html的方向代理,并且,配置了对后端api接口的方向代理 E:\nginx-1.14.0\conf\nginx.conf #u ...
- 阿里妈妈佣金转换API接口代码对接教程
阿里妈妈佣金转换API接口(淘宝客佣金接口,阿里妈妈返佣接口,淘宝链接转换接口)代码对接教程如下: 1.公共参数 名称 类型 必须 描述 key String 是 调用key(必须以GET方式拼接在U ...
- 阿里妈妈佣金转换API接口(item_id-佣金转换)接口代码对接教程
阿里妈妈佣金转换API接口(item_id-佣金转换)接口代码对接教程如下: 1.公共参数 名称 类型 必须 描述(接口代码教程wx19970108018) key String 是 调用key(必须 ...
- 阿里妈妈佣金转换API接口(阿里妈妈返佣接口,淘宝客佣金接口,淘宝链接转换接口)代码对接教程
阿里妈妈佣金转换API接口(阿里妈妈返佣接口,淘宝客佣金接口,淘宝链接转换接口,淘宝佣金转换接口)代码对接教程如下: 1.公共参数 名称 类型 必须 描述 key String 是 调用key(必须以 ...
- Android暴露api接口,Android-如何保证API接口数据安全
Android-如何保证API接口数据安全 Android-如何保证API接口数据安全 前后端分离的开发方式,我们以接口为标准来进行推动,定义好接口,各自开发自己的功能,最后进行联调整合.无论是开发原 ...
- 如何保证API接口安全?
一.摘要 在实际的业务开发过程中,我们常常会碰到需要与第三方互联网公司进行技术对接,例如支付宝支付对接.微信支付对接.高德地图查询对接等等服务,如果你是一个创业型互联网,大部分可能都是对接别的公司ap ...
- 唯品会关键字搜索商品API接口(item_search-按关键字搜索唯品会商品API接口),唯品会API接口
一.唯品会关键字搜索商品API接口(item_search-按关键字搜索唯品会商品API接口),唯品会API接口接口可获取到宝贝标题,宝贝价格,宝贝ID,宝贝图片,优惠价,宝贝链接,卖家昵称,店铺所在 ...
- 京东推荐商品列表API接口-(item_recommend-获取推荐商品列表API接口),京东API接口
一.京东推荐商品列表API接口-(item_recommend-获取推荐商品列表API接口),京东API接口代码对接如下: 1.请求参数: 名称 类型 必须 描述 key String 是 调用key ...
- 京东商品评论API接口-(item_review-获得JD商品评论API接口),京东API接口
一.京东商品评论API接口-(item_review-获得JD商品评论API接口),京东API接口代码对接如下: 1.公共参数 名称 类型 必须 描述 key String 是 调用key(必须以GE ...
- tmall.product.schema.add(淘宝天猫商品发布接口),淘宝商品发布API接口,tmall.product.schema.get产品信息获取接口
tmall.product.schema.add(淘宝天猫商品发布接口),淘宝商品发布API接口,可以用于店铺发货,店铺订单详情获取,店铺明文接口,订单同步,订单推送等业务,下面是一套完整的订单发货的 ...
最新文章
- caffe 关于Deconvolution的初始化注意事项
- Shiro系列-Authenticator和AuthenticationStrategy是什么
- 服务器与虚拟技术,云服务器与虚拟化服务器的区别
- Centos安装(更新)git(亲测有效)
- 57.should merge Js
- android sepolicy 最新小结
- 爱奇艺小程序陪你嗨一夏
- 十独吟 之一 李清照
- 赣锋锂业公布子公司赣锋国际收购澳大利亚RIM公司6.9%股权进展
- VisionMaster 学习笔记(USB 孔定位)
- c语言坐标系的方向,左/右手坐标系与坐标正/负方向旋转的详细介绍
- 【UPCOJ】问题 U: 打酱油
- 自行编译ngrok服务端客户端,替代花生壳,跨平台
- 如何在繁忙的工作中,做好技术积累?
- 在制定seo计划之前要确定网站用户需求
- Tool-360关闭健康助手,关闭360的弹窗(自动倒计时出现锁屏页面)
- 腾讯云WAF服务再获国内权威研究机构认可,入选中国云WAF实践代表
- 【SciSpace】强大的PDF论文AI辅助阅读器
- 爬取wallheaven壁纸
- (原創) 如何解決ThinkVantage Power Manager『電源配置』無故消失的bug (NB) (ThinkPad) ?...
热门文章
- python中在一个脚本调用另一个脚本类中函数变量值
- 20200621每日一句
- opencv打开双目,采集标定双目的图片
- 190702每日一句 孤独之前是迷茫,孤独之后是成长
- 190123每日一句
- Atitit 提升水平 把代码写的有技术含量 目录 1. 提高可读性(重要)	2 1.1. 异常模式代替返回值	2 1.2. Dsl	2 1.3. 流畅接口方法链	2 1.4. 层次结构抽象	2 1
- Atitit file cms api jcr1 jcr2 目录 1.1. 么是JSR-170幸运的是,被称为Java内容仓库(Java Content Repository,JCR)的JSR-
- Atitit.api参数传递的设计
- paip.uapi 获取网络url内容html 的方法java php ahk c++ python总结.
- paip.提升安全性---WEB程序安全检测与防范