一、解决问题:

  1. 请求身份是否合法?
  2. 请求参数是否被篡改?
  3. 请求是否唯一?

二、问题分析与处理

1.身份合法性保证:

clientid+secretkey方案

参数名 是否必须
clientid 开发者标识/应用标识
secretkey 用于接口加密

为开发者分配clientid(开发者标识,确保唯一)和secretkey(用于接口加密,确保不易被穷举,生成算法不易被猜测)

2.请求被篡改防护:预防请求被中途篡改的隐患

参数签名方案

  • 按照请求参数名的字母升序排列非空请求参数(包含clientid),使用URL键值对的格式(即key1=value1&key2=value2…)拼接成字符串stringA;
  • 在stringA最后拼接上secretkey得到字符串stringSignTemp;
  • 对stringSignTemp进行MD5运算,并将得到的字符串所有字符转换为大写,得到sign值。

    请求携带参数clientid和sign,只有拥有合法的身份clientid和正确的签名sign才能放行。这样就解决了身份验证和参数篡改问题,即使请求参数被劫持,由于获取不到secretkey(仅作本地加密使用,不参与网络传输),无法伪造合法的请求。

3.请求唯一性保证:预防重复使用请求参数伪造二次请求的隐患

timestamp+nonce方案

timestamp:定义一个客户端与服务器之间允许的时间差。当有新的请求进入时,首先检查携带的timestamp是否在15分钟内,如超出时间范围,则拒绝。

nonce:指唯一的随机字符串,用来标识每个被签名的请求。通过为每个请求提供一个唯一的标识符,服务器能够防止请求被多次使用。

对服务器来说永久存储所有接收到的nonce的代价是非常大的。可以使用timestamp来优化nonce的存储。
假设允许客户端和服务端最多能存在15分钟的时间差,同时追踪记录在服务端的nonce集合。当有新的请求进入时,首先检查携带的timestamp是否在15分钟内,如超出时间范围,则拒绝,然后查询携带的nonce,如存在已有集合,则拒绝。否则,记录该nonce,并删除集合内时间戳大于15分钟的nonce(可以使用redis的expire,新增nonce的同时设置它的超时失效时间为15分钟)。

实现:

客户端

参数名 是否必须 规格
clientid 开发者标识/应用标识 9位英文字符大写
secretkey 用于接口加密 20位数字英文字符大写
signature 加密签名 生成
timestamp 时间戳 毫秒级ms
nonce 随机数
//1.参数排序,拼接成字符串(例如:key1=value1&key2=value2)​​​​​​​//2.将参数串接起来加上secretkey,生成待摘要字符串stringSignTemp​​​​​​​//3.使用MD5等摘要算法生成摘要串,并将得到的摘要串所有字符转换为大写,得到sign值​​​​​​​//4.请求携带参数clientid和sign,只有拥有合法的身份clientid和正确的签名sign才能放行

服务器端

//1.参数排序​​​​​​​//2.将参数串接起来加上secret(通过header中的clientid在数据库获取),生成待摘要字符串​​​​​​​//3.使用MD5等摘要算法生成摘要串,并将得到的摘要串所有字符转换为大写,得到sign值​​​​​​​//4.服务端生成的摘要串sign与客户端通过header传递过来的摘要串sign进行比较

开放平台API安全设计方案相关推荐

  1. 新浪微博开放平台API中page参数的使用方法

    新浪微博开放平台API中page参数的使用方法 在做项目的时候,有时候要调用新浪微博开放平台的API.说实话,新浪微博的API功能很强大,但是API文档写的不是很清楚. 我在做项目的时候,调用了很多A ...

  2. 关于淘宝API的详细说明(淘宝开放平台API揭秘)

    自淘宝开放平台Beta公测开始,陆续开放了上百次个API,这些API涵盖了淘宝基本业务,截止发日志当天开放平台API每天的调用量可是说是天文数字. 作为TOP开发者的您对 于淘宝平台-API可以信手拿 ...

  3. php开放平台,顺丰开放平台API PHP SDK demo

    顺丰开放平台Api PHP SDK demo 引用 对接前期工作注册 提交接入申请 接口初始化配置,获得 app_id 和app_secret 完成测试环境测试 进入生产使用 接入注意事项申请令牌 ( ...

  4. 《后端》开放平台API安全设计

    文章目录 开放平台API接口加密,签名策略 参考各大平台策略 支付宝 微信 签名的概念与方法 2.1 为什么要签名? 2.2 签名算法过程 2.2.1 APPKEY+签名认证 2.2.2 token+ ...

  5. Python调用纷享销客CRM开放平台API

    使用Python调用纷享销客CRM开放平台API接口: #!/usr/bin/env python # -*- coding:utf-8 -*- # Author:wangzhifeng@tongdo ...

  6. Golang淘宝开放平台Api请求基础SDK

    GO语言.淘宝Api.淘宝开放平台Api请求基础SDK dkeng/opentaobao-go​github.com 淘宝API sign算法dkeng/opentaobao-go淘宝API sign ...

  7. 关于淘宝开放平台API的session失效问题解决

    前几天发现淘宝开放平台API突然无法调用了,一直在提示出错,提示的错误信息为:Invalid session. 众所周知淘宝开放平台的API接口调用需要三个Key:appKey(合作方标识), sec ...

  8. 在vue3+vite中引入高德开放平台API实现边界范围多边形的绘制

    在vue3+vite中引入高德开放平台API实现边界范围多边形的绘制 1,先去高德地图开放平台申请账号注册流程不再赘述; 2,在我的应用中创建key,选择web端Js点击提交生成; 3,生成后可以看到 ...

  9. 淘宝开放平台API开发(一)

    2019独角兽企业重金招聘Python工程师标准>>> 一.前言 淘宝官方为应用开发者提供了一套很好的API,开发是只要调用它的API接口就可以获取相应的数据.笔者现正从事Java ...

  10. 支付宝开放平台api接口封装统一调用方式

    在对接支付宝过程中,发现支付宝每个接口例子,都定义了AlipayClient和xxxRequest.xxxResponse. 老的写法就是每次都去写new一个AlipayClient package ...

最新文章

  1. Camera噪声问题
  2. Design Pattern - Factory Method(C#)
  3. 关于Spring 声明式事务处理时,throws exception不回滚的问题
  4. 【高效解法】1065 单身狗 (25分)_27行代码AC
  5. 计算机组成原理第三章视频,计算机组成原理 第3章 3.4 十进制转换二进制
  6. The way of Webpack learning (IV.) -- Packaging CSS(打包css)
  7. 7-8 德才论 (25 分)(C语言实现)
  8. 图文讲解5G调制,特别通俗易懂!
  9. AndroidO Treble架构下HIDL服务Java框架实现
  10. 京东探索研究院 34 篇论文入选 CVPR 2022
  11. 有了数据湖探索服务,企业决策“新”中有数
  12. Unity3d中使用百度语音识别及语音合成【含源码】
  13. 最小二乘法拟合圆公式推导及vc实现[r]
  14. 雷云云服务器文件夹,配置文件云存储 雷蛇Synapse2.0_雷蛇鼠标_键鼠评测-中关村在线...
  15. 小程序图片实现自适应大小,超过部分自动裁剪
  16. 小程序 用户反馈_用户反馈如何提高我的应用程序的安全性
  17. drools决策表的简单使用
  18. 给大家推荐一个比较好的VC论坛【VC驿站】
  19. 国家邮政局出马,菜鸟顺丰大战落幕
  20. PLC SECS/GEM解决方案,设计与应用

热门文章

  1. Linux接蓝牙音响无声音,win10蓝牙音箱没有声音怎么办_win10蓝牙音响连接成功没声音处理方法...
  2. Infor CloudSuite Industrial (SyteLine) IDO 行授权 设置
  3. (附源码)springboot宠物管理系统 毕业设计 121654
  4. 离散帕斯瓦尔定理、帕斯瓦尔定理的证明
  5. clion-debug调试步骤
  6. 计算文件MD5值的多种方法
  7. matlab模型预测控制基本原理,matlab模型预测控制
  8. 10. logback详解,Flink流处理案例及Hive和Hbase的整合
  9. if (resultCode == RESULT_OK) 在红米手机上resultCode返回并不是RESULT_OK
  10. 如何从官网下载Chrome浏览器离线安装包