当前位置: 首页 > news >正文

API接口签名验证

系统从外部获取数据时,通常采用API接口调用的方式来实现。请求方和接口提供方之间的通信过程,有这几个问题需要考虑:

  1. 请求参数是否被篡改;
  2. 请求来源是否合法;
  3. 请求是否具有唯一性;

今天跟大家探讨一下主流的通信安全解决方案。

 

参数签名方式

这种方式是主流。它要求调用方按照约定好的算法生成签名字符串,作为请求的一部分,接口提供方验算签名即可知是否合法。步骤通常如下:
①接口提供方给出appid和appsecret
②调用方根据appid和appsecret以及请求参数,按照一定算法生成签名sign
③接口提供方验证签名
生成签名的步骤如下:
①将所有业务请求参数按字母先后顺序排序
②参数名称和参数值链接成一个字符串A
③在字符串A的首尾加上appsecret组成一个新字符串B
④对字符串进行md5得到签名sign
假设请求的参数为:f=1,b=23,k=33,排序后为b=23,f=1,k=33,参数名和参数值链接后为b23f1k33,首尾加上appsecret后md5:
md5(secretkey1value1key2value2...secret)。

以上签名方法安全有效地解决了参数被篡改和身份验证的问题,如果参数被篡改,没事,因为别人无法知道appsecret,也就无法重新生成新的sign。
这里使用了md5的算法进行签名,也可以自行选择其他签名方式,例如RSA,SHA等。

 

请求唯一性保证

md5签名方法可以保证来源及请求参数的合法性,但是请求链接一旦泄露,可以反复请求,对于某些拉取数据的接口来说并不是一件好事,相当于是泄露了数据。
在请求中带上时间戳,并且把时间戳也作为签名的一部分,在接口提供方对时间戳进行验证,只允许一定时间范围内的请求,例如1分钟。因为请求方和接口提供方的服务器可能存在一定的时间误差,建议时间戳误差在5分钟内比较合适。允许的时间误差越大,链接的有效期就越长,请求唯一性的保证就越弱。所以需要在两者之间衡量。

 

秘钥的保存 

在签名的过程中,起到决定性作用之一的是appsecret,因此如何保存成为关键。我们分类讨论。
接口调用方的代码跑在服务器的情况比较好办,除非服务器被攻陷,否则外接无法知道appsecret,当然,要注意不能往日志里写入appsecret的值,其他敏感值也禁止写入日志,如账号密码等信息。
假如是客户端请求接口,就需要多想一步了。假如把appsecret硬编码到客户端,会有反编译的风险,特别是android。可以在客户端登陆验证成功后,返回给客户端的信息中带上appsecret(当然,返回的数据也可能被拦截,真是防不胜防啊。。。)。特别说明一下,在android开发中,假如硬要把appsecret硬编码,建议把appsecret放到NDK中编译成so文件,app启动后去读取。

转载于:https://www.cnblogs.com/sntetwt/p/11398507.html

相关文章:

  • 如何配置IIS使其支持APK文件的下载
  • python进程|线程|协程
  • -Shell 命令行工具 Cmder Babun Zsh MD
  • Apache Kafka(五)- Safe Kafka Producer
  • vue项目-axios封装、easy-mock使用
  • 扫描器开发框架学习
  • Java多线程实现和JUC介绍
  • git commit撤回操作
  • 内存运行PE文件
  • Mysql数据库
  • Apache Kafka(六)- High Throughput Producer
  • 设计模式-策略模式
  • CTF 资源
  • hibernate的id生成策略
  • Apache Kafka(七)- Kafka ElasticSearch Comsumer
  • [笔记] php常见简单功能及函数
  • docker容器内的网络抓包
  • leetcode-27. Remove Element
  • node-glob通配符
  • PHP的Ev教程三(Periodic watcher)
  • Python socket服务器端、客户端传送信息
  • Python 反序列化安全问题(二)
  • React中的“虫洞”——Context
  • vue自定义指令实现v-tap插件
  • 短视频宝贝=慢?阿里巴巴工程师这样秒开短视频
  • 开年巨制!千人千面回放技术让你“看到”Flutter用户侧问题
  • 浅谈Kotlin实战篇之自定义View图片圆角简单应用(一)
  • 腾讯优测优分享 | Android碎片化问题小结——关于闪光灯的那些事儿
  • 用mpvue开发微信小程序
  • 大数据全解:定义、价值及挑战
  • #include
  • #pragam once 和 #ifndef 预编译头
  • #Spring-boot高级
  • (2)关于RabbitMq 的 Topic Exchange 主题交换机
  • (env: Windows,mp,1.06.2308310; lib: 3.2.4) uniapp微信小程序
  • (TOJ2804)Even? Odd?
  • (差分)胡桃爱原石
  • (二)正点原子I.MX6ULL u-boot移植
  • (附源码)python房屋租赁管理系统 毕业设计 745613
  • (附源码)计算机毕业设计SSM教师教学质量评价系统
  • (三)模仿学习-Action数据的模仿
  • (四)模仿学习-完成后台管理页面查询
  • (一) storm的集群安装与配置
  • (转)Android中使用ormlite实现持久化(一)--HelloOrmLite
  • (转)清华学霸演讲稿:永远不要说你已经尽力了
  • .bat批处理(五):遍历指定目录下资源文件并更新
  • .NET CLR Hosting 简介
  • .net core webapi 大文件上传到wwwroot文件夹
  • .net framework 4.0中如何 输出 form 的name属性。
  • .net 打包工具_pyinstaller打包的exe太大?你需要站在巨人的肩膀上-VC++才是王道
  • /usr/local/nginx/logs/nginx.pid failed (2: No such file or directory)
  • @EnableConfigurationProperties注解使用
  • [ web基础篇 ] Burp Suite 爆破 Basic 认证密码
  • []AT 指令 收发短信和GPRS上网 SIM508/548
  • [3D游戏开发实践] Cocos Cyberpunk 源码解读-高中低端机性能适配策略