1. ​前后端分离的开发方式,我们以接口为标准来进行推动,定义好接口,各自开发自己的功能,最后进行联调整合。无论是开发原生的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接口数据安全?相关推荐

  1. nginx学习笔记002---Nginx代理配置_案例1_实现了对前端代码的方向代理_并且配置了后端api接口的访问地址

    做个记录,以后做简单的nginx的时候拿过来就用 这个配置实现了,对前端html的方向代理,并且,配置了对后端api接口的方向代理 E:\nginx-1.14.0\conf\nginx.conf #u ...

  2. 阿里妈妈佣金转换API接口代码对接教程

    阿里妈妈佣金转换API接口(淘宝客佣金接口,阿里妈妈返佣接口,淘宝链接转换接口)代码对接教程如下: 1.公共参数 名称 类型 必须 描述 key String 是 调用key(必须以GET方式拼接在U ...

  3. 阿里妈妈佣金转换API接口(item_id-佣金转换)接口代码对接教程

    阿里妈妈佣金转换API接口(item_id-佣金转换)接口代码对接教程如下: 1.公共参数 名称 类型 必须 描述(接口代码教程wx19970108018) key String 是 调用key(必须 ...

  4. 阿里妈妈佣金转换API接口(阿里妈妈返佣接口,淘宝客佣金接口,淘宝链接转换接口)代码对接教程

    阿里妈妈佣金转换API接口(阿里妈妈返佣接口,淘宝客佣金接口,淘宝链接转换接口,淘宝佣金转换接口)代码对接教程如下: 1.公共参数 名称 类型 必须 描述 key String 是 调用key(必须以 ...

  5. Android暴露api接口,Android-如何保证API接口数据安全

    Android-如何保证API接口数据安全 Android-如何保证API接口数据安全 前后端分离的开发方式,我们以接口为标准来进行推动,定义好接口,各自开发自己的功能,最后进行联调整合.无论是开发原 ...

  6. 如何保证API接口安全?

    一.摘要 在实际的业务开发过程中,我们常常会碰到需要与第三方互联网公司进行技术对接,例如支付宝支付对接.微信支付对接.高德地图查询对接等等服务,如果你是一个创业型互联网,大部分可能都是对接别的公司ap ...

  7. 唯品会关键字搜索商品API接口(item_search-按关键字搜索唯品会商品API接口),唯品会API接口

    一.唯品会关键字搜索商品API接口(item_search-按关键字搜索唯品会商品API接口),唯品会API接口接口可获取到宝贝标题,宝贝价格,宝贝ID,宝贝图片,优惠价,宝贝链接,卖家昵称,店铺所在 ...

  8. 京东推荐商品列表API接口-(item_recommend-获取推荐商品列表API接口),京东API接口

    一.京东推荐商品列表API接口-(item_recommend-获取推荐商品列表API接口),京东API接口代码对接如下: 1.请求参数: 名称 类型 必须 描述 key String 是 调用key ...

  9. 京东商品评论API接口-(item_review-获得JD商品评论API接口),京东API接口

    一.京东商品评论API接口-(item_review-获得JD商品评论API接口),京东API接口代码对接如下: 1.公共参数 名称 类型 必须 描述 key String 是 调用key(必须以GE ...

  10. tmall.product.schema.add(淘宝天猫商品发布接口),淘宝商品发布API接口,tmall.product.schema.get产品信息获取接口

    tmall.product.schema.add(淘宝天猫商品发布接口),淘宝商品发布API接口,可以用于店铺发货,店铺订单详情获取,店铺明文接口,订单同步,订单推送等业务,下面是一套完整的订单发货的 ...

最新文章

  1. caffe 关于Deconvolution的初始化注意事项
  2. Shiro系列-Authenticator和AuthenticationStrategy是什么
  3. 服务器与虚拟技术,云服务器与虚拟化服务器的区别
  4. Centos安装(更新)git(亲测有效)
  5. 57.should merge Js
  6. android sepolicy 最新小结
  7. 爱奇艺小程序陪你嗨一夏
  8. 十独吟 之一 李清照
  9. 赣锋锂业公布子公司赣锋国际收购澳大利亚RIM公司6.9%股权进展
  10. VisionMaster 学习笔记(USB 孔定位)
  11. c语言坐标系的方向,左/右手坐标系与坐标正/负方向旋转的详细介绍
  12. 【UPCOJ】问题 U: 打酱油
  13. 自行编译ngrok服务端客户端,替代花生壳,跨平台
  14. 如何在繁忙的工作中,做好技术积累?
  15. 在制定seo计划之前要确定网站用户需求
  16. Tool-360关闭健康助手,关闭360的弹窗(自动倒计时出现锁屏页面)
  17. 腾讯云WAF服务再获国内权威研究机构认可,入选中国云WAF实践代表
  18. 【SciSpace】强大的PDF论文AI辅助阅读器
  19. 爬取wallheaven壁纸
  20. (原創) 如何解決ThinkVantage Power Manager『電源配置』無故消失的bug (NB) (ThinkPad) ?...

热门文章

  1. python中在一个脚本调用另一个脚本类中函数变量值
  2. 20200621每日一句
  3. opencv打开双目,采集标定双目的图片
  4. 190702每日一句 孤独之前是迷茫,孤独之后是成长
  5. 190123每日一句
  6. Atitit 提升水平 把代码写的有技术含量 目录 1. 提高可读性(重要) 2 1.1. 异常模式代替返回值 2 1.2. Dsl 2 1.3. 流畅接口方法链 2 1.4. 层次结构抽象 2 1
  7. Atitit file cms api jcr1 jcr2 目录 1.1. 么是JSR-170幸运的是,被称为Java内容仓库(Java Content Repository,JCR)的JSR-
  8. Atitit.api参数传递的设计
  9. paip.uapi 获取网络url内容html 的方法java php ahk c++ python总结.
  10. paip.提升安全性---WEB程序安全检测与防范