安全架构-api接口签名防止数据篡改

安全架构-api接口签名防止数据篡改

本篇为安全架构中api接口通信安全相关的内容,之前介绍了业务安全,如幂等性设计,不熟悉的朋友可以看下幂等性设计的文章。



前言

api接口通讯是当前软件架构中使用非常广泛的方式,分布式架构,微服务架构,Restful接口;内部系统之间接口,第三方系统调用的接口;提供给第三方的接口等方面,都会用到api接口调用。最常见的有微信支付宝支付接口对接,百度API接口对接,各种第三方业务接口对接,等等,都会涉及到API接口通讯安全处理。作为一个架构师,必须熟悉掌握此部分安全设计,本文介绍接口通讯安全中的防止数据篡改问题-接口签名。


一、什么是接口签名?

接口签名是在进行API接口调用的时候,接口调用方按照接口提供方要求的算法生成签名字段,并传递签名字段,接口提供方接受到签名字段后,按照相同的算法对数据进行签名计算,比较二者的值,相同则签名验证通过,可以进行后续业务处理。

二、接口签名作用

处于开放环境的数据传输都是可以被截取,甚至被篡改的,通过finder等工具,可以抓取网络请求的数据,如果不做签名,则可以任意修改请求数据,是业务逻辑处理完全混乱。
1、签名算法保障数据不可篡改,请求的数据参入了签名,数值改变签名也会改变。需完全知道签名算法的调用方可以生成改变后的签名,网络截取数据,因不知道签名算法和签名秘钥,生成不成功新的签名,因此调用失败。
2、因签名算法互联网做法基本相同,因此很容易破解,因此在签名秘钥上必须注重传输安全。当前常用做法一般是线下传输签名秘钥,双方共同保存好签名秘钥。(也有在线获取动态秘钥用于签名的方案,后续文章介绍)。因此能正确签名验证成功,也说明调用方具有该接口的调用权限,是一个基本的权限控制方法。

三、常用做法

1.签名算法

1、将所有业务请求参数按字母先后顺序排序,不包括签名字段本身;
2、参数名称和参数值按键值对链接成一个字符串A;key1=value1&key2=value2&k3=v3
3、在字符串A的末尾直接拼上appsecret组成一个新字符串B:key1=value1&key2=value2&k3=v3appsecret
4、对字符串B进行md5得到签名sign;
假设请求的参数为:fo=1,bo=23,ko=33,排序后为bo=23&fo=1&ko=33,参数名和参数值链接后为bo=23&fo=1&ko=33,末尾加上appsecret后md5:
md5(bo=23&fo=1&ko=33appsecret);
5、接口调用时,传递参数sign=sign;

**http://api/method?fo=1&bo=23&ko=33&sign=BCC7C71CF93F9CDBDB88671B701D8A35**

2.签名算法变种

  • 0
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值