不要急,源代码分享在最底部,先问大家一个问题,你在写开放的API接口时是如何保证数据的安全性的?先来看看有哪些安全性问题在开放的api接口中,我们通过http Post或者Get方式请求服务器的时候,会面临着许多的安全性问题,例如:

  • 1. 请求来源(身份)是否合法?
  • 2. 请求参数被篡改?
  • 3. 请求的唯一性(不可复制)

为了保证数据在通信时的安全性,我们可以采用参数签名的方式来进行相关验证。

案列分析

我们通过给某 [移动端(app)] 写 [后台接口(api)] 的案例进行分析:

客户端: 以下简称app

后台接口:以下简称api
我们通过app查询产品列表这个操作来进行分析:

app中点击查询按钮==》调用api进行查询==》返回查询结果==>显示在app中

上代码啦 -_-!

一、不进行验证的方式

api查询接口:

app调用:http://api.test.com/getproducts?参数1=value1.......

如上,这种方式简单粗暴,通过调用getproducts方法即可获取产品列表信息了,但是 这样的方式会存在很严重的安全性问题,没有进行任何的验证,大家都可以通过这个方法获取到产品列表,导致产品信息泄露。
那么,如何验证调用者身份呢?如何防止参数被篡改呢?
二、MD5参数签名的方式

我们对api查询产品接口进行优化:

1. 给app分配对应的key、secret

2. Sign签名,调用API 时需要对请求参数进行签名验证,签名方式如下:

a. 按照请求参数名称将所有请求参数按照字母先后顺序排序得到:keyvaluekeyvalue...keyvalue  字符串如:将arong=1,mrong=2,crong=3 排序为:arong=1, crong=3,mrong=2  然后将参数名和参数值进行拼接得到参数字符串:arong1crong3mrong2。

b. 将secret加在参数字符串的头部后进行MD5加密 ,加密后的字符串需大写。即得到签名Sign
新api接口代码:

app调用:http://api.test.com/getproducts?key=app_key&sign=BCC7C71CF93F9CDBDB88671B701D8A35&参数1=value1&参数2=value2.......

注:secret 仅作加密使用, 为了保证数据安全请不要在请求参数中使用。

如上,优化后的请求多了key和sign参数,这样请求的时候就需要合法的key和正确签名sign才可以获取产品数据。这样就解决了身份验证和防止参数篡改问题,如果请求参数被人拿走,没事,他们永远也拿不到secret,因为secret是不传递的。再也无法伪造合法的请求。
但是...这样就够了吗?细心的同学可能会发现,如果我获取了你完整的链接,一直使用你的key和sign和一样的参数不就可以正常获取数据了...-_-!是的,仅仅是如上的优化是不够的
请求的唯一性:

为了防止别人重复使用请求参数问题,我们需要保证请求的唯一性,就是对应请求只能使用一次,这样就算别人拿走了请求的完整链接也是无效的。
唯一性的实现:在如上的请求参数中,我们加入时间戳 :timestamp(yyyyMMddHHmmss),同样,时间戳作为请求参数之一,也加入sign算法中进行加密。
新的api接口:

app调用:
http://api.test.com/getproducts?key=app_key&sign=BCC7C71CF93F9CDBDB88671B701D8A35&timestamp=201603261407&参数1=value1&参数2=value2.......
如上,我们通过timestamp时间戳用来验证请求是否过期。这样就算被人拿走完整的请求链接也是无效的。

Sign签名安全性分析:

通过上面的案例,我们可以看出,安全的关键在于参与签名的secret,整个过程中secret是不参与通信的,所以只要保证secret不泄露,请求就不会被伪造。

总结

上述的Sign签名的方式能够在一定程度上防止信息被篡改和伪造,保障通信的安全,这里使用的是MD5进行加密,当然实际使用中大家可以根据实际需求进行自定义签名算法,比如:RSA,SHA等。

相关方法源码分享:

源码已托管至码云:https://git.oschina.net/daimali/Daimali.ISV

来源:http://www.daimali.com/index.php/2016/04/27/241/

慎于行,敏于思!

学习交流群:364976091

【转】开放api接口签名验证相关推荐

  1. 拒绝接口裸奔!开放API接口签名验证!

    点击上方蓝色"方志朋",选择"设为星标" 回复"666"获取独家整理的学习资料! 来源:r6d.cn/kChH 接口安全问题 请求身份是否合 ...

  2. 开放API接口签名验证,让你的接口从此不再裸奔

    点击上方蓝色"终端研发部",选择"设为星标" 学最好的别人,做最好的我们 接口安全问题 请求身份是否合法? 请求参数是否被篡改? 请求是否唯一? AccessK ...

  3. 开放api接口签名验证

    不要急,源代码分享在最底部,先问大家一个问题,你在写开放的API接口时是如何保证数据的安全性的?先来看看有哪些安全性问题在开放的api接口中,我们通过http Post或者Get方式请求服务器的时候, ...

  4. 公司接口裸奔10年了,有必要用API接口签名验证吗?

    点击上方"阿拉奇学Java",选择"置顶或者星标" 每天早晨00点00分,与你相约! 往日回顾:微信支付的架构到底有多牛? 接口安全问题 请求身份是否合法? 请 ...

  5. 腾讯会议开放API接口,为企业打造专属的“腾讯会议”

    远程办公需求在疫情期间爆发,推动各行各业加速企业内外部协同效率的数字化改造.基于这样的背景,腾讯会议宣布开放API接口,无论是企业IT.系统集成商.SaaS服务商,均可轻松适配多种会议场景需求,同时还 ...

  6. 开放API接口整合多元办公能力,企业微信助IT企业打造高效办公平台

    5月11日,企业微信线下行业交流沙龙--IT行业专场来到北京,产品团队在现场深入解读了企业微信如何更好地帮助IT企业兼顾效率与成本,满足IT企业办公的高效.轻便和移动化. 此次活动,艺龙网及众安保险作 ...

  7. 天行数据的开放API接口

    天行数据的开放API接口: 接口名称 链接 简介 微信链接转换 https://www.tianapi.com/apiview/89 将临时链接转为永久链接 查询微信全文 https://www.ti ...

  8. 开放 API 接口安全设计思路

    开放API接口安全校验的背景: 在未进行安全处理的开放 API 接口存在诸多的风险问题,如以下三种常见场景: 1.场景一 A 公司开发的开放 API 未对接口进行安全控制,有黑客通过爬虫程序调用开放 ...

  9. 银行开放api接口_开放标准API如何彻底改变银行业

    银行开放api接口 英国政府已委托英国银行进行可行性研究,以使客户能够通过开放标准API与第三方共享交易数据. 早在12月的秋季声明中首次提到,总理现在就在3月的最新预算中概述了强制性开放银行API标 ...

最新文章

  1. 建立ghost备份后,找不到gho文件
  2. python网络编程基础(线程与进程、并行与并发、同步与异步、阻塞与非阻塞、CPU密集型与IO密集型)...
  3. python全栈开发总结_python全栈开发 * 12 知识点汇总 * 180530
  4. 工信部副部长刘利华:推动5G全球统一标准 加强国际合作
  5. request的生命周期
  6. wxWidgets:wxCollapsiblePane类用法
  7. 安卓 原生okhttp使用get与post获取网络数据
  8. dropbox_在5分钟内学习Dropbox API
  9. 为什么说“进程是资源分配的单位、线程是调度的单位”?
  10. 蓝盾小火墙补丁_网络安全知识小科普
  11. Python压缩新文件到已有ZIP文件
  12. Android eclipse sdk包升级
  13. 中新赛克数据可视化_大道至简,OceanEye大数据可视化工具的高效之道
  14. 当中国传统文化IP与NFT撞个满怀,能擦出什么火花
  15. 计算机处理器(CPU)基础
  16. 【毕业设计】30-基于单片机矿井瓦斯_气体浓度_烟雾浓度报警设计(原理图+源代码+仿真+答辩论文+答辩PPT)
  17. 【目录】全志V3S学习记录
  18. Spring boot快速开发Rest服务
  19. 打小都说我聪明,自从学了Linux,我才如梦初醒
  20. 移动常见业务单词和词组

热门文章

  1. debian,ubuntu下安装MariaDB,并设置密码,修改端口,允许外网访问
  2. python精度丢失_JS大坑之19位数的Number型精度丢失问题详解_稚终_前端开发者
  3. python获取图片像素矩阵_用python处理图片实现图像中的像素访问
  4. JAVA批量上传下载Excel_如何实现批量上传----------Java解析excel
  5. Centos7 上安装 mysql5.7
  6. dataset的去重计数 g2_去互联网公司面试,面试官问我SpringCloud,附答案
  7. 性能压测服务器502报错,一种交易系统的性能测试方法及相关服务器
  8. JAVA 反射知识点总汇
  9. python数据库pymysql_Python——数据库04 Python操作MySQL pymysql模块使用,python,04python,MySQLpymysql...
  10. latex 表格单元格上下左右居中_Excel文字对齐技巧:学会这6种方式,快速整理规范表格...