开放平台API安全设计方案
一、解决问题:
- 请求身份是否合法?
- 请求参数是否被篡改?
- 请求是否唯一?
二、问题分析与处理
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安全设计方案相关推荐
- 新浪微博开放平台API中page参数的使用方法
新浪微博开放平台API中page参数的使用方法 在做项目的时候,有时候要调用新浪微博开放平台的API.说实话,新浪微博的API功能很强大,但是API文档写的不是很清楚. 我在做项目的时候,调用了很多A ...
- 关于淘宝API的详细说明(淘宝开放平台API揭秘)
自淘宝开放平台Beta公测开始,陆续开放了上百次个API,这些API涵盖了淘宝基本业务,截止发日志当天开放平台API每天的调用量可是说是天文数字. 作为TOP开发者的您对 于淘宝平台-API可以信手拿 ...
- php开放平台,顺丰开放平台API PHP SDK demo
顺丰开放平台Api PHP SDK demo 引用 对接前期工作注册 提交接入申请 接口初始化配置,获得 app_id 和app_secret 完成测试环境测试 进入生产使用 接入注意事项申请令牌 ( ...
- 《后端》开放平台API安全设计
文章目录 开放平台API接口加密,签名策略 参考各大平台策略 支付宝 微信 签名的概念与方法 2.1 为什么要签名? 2.2 签名算法过程 2.2.1 APPKEY+签名认证 2.2.2 token+ ...
- Python调用纷享销客CRM开放平台API
使用Python调用纷享销客CRM开放平台API接口: #!/usr/bin/env python # -*- coding:utf-8 -*- # Author:wangzhifeng@tongdo ...
- Golang淘宝开放平台Api请求基础SDK
GO语言.淘宝Api.淘宝开放平台Api请求基础SDK dkeng/opentaobao-gogithub.com 淘宝API sign算法dkeng/opentaobao-go淘宝API sign ...
- 关于淘宝开放平台API的session失效问题解决
前几天发现淘宝开放平台API突然无法调用了,一直在提示出错,提示的错误信息为:Invalid session. 众所周知淘宝开放平台的API接口调用需要三个Key:appKey(合作方标识), sec ...
- 在vue3+vite中引入高德开放平台API实现边界范围多边形的绘制
在vue3+vite中引入高德开放平台API实现边界范围多边形的绘制 1,先去高德地图开放平台申请账号注册流程不再赘述; 2,在我的应用中创建key,选择web端Js点击提交生成; 3,生成后可以看到 ...
- 淘宝开放平台API开发(一)
2019独角兽企业重金招聘Python工程师标准>>> 一.前言 淘宝官方为应用开发者提供了一套很好的API,开发是只要调用它的API接口就可以获取相应的数据.笔者现正从事Java ...
- 支付宝开放平台api接口封装统一调用方式
在对接支付宝过程中,发现支付宝每个接口例子,都定义了AlipayClient和xxxRequest.xxxResponse. 老的写法就是每次都去写new一个AlipayClient package ...
最新文章
- Camera噪声问题
- Design Pattern - Factory Method(C#)
- 关于Spring 声明式事务处理时,throws exception不回滚的问题
- 【高效解法】1065 单身狗 (25分)_27行代码AC
- 计算机组成原理第三章视频,计算机组成原理 第3章 3.4 十进制转换二进制
- The way of Webpack learning (IV.) -- Packaging CSS(打包css)
- 7-8 德才论 (25 分)(C语言实现)
- 图文讲解5G调制,特别通俗易懂!
- AndroidO Treble架构下HIDL服务Java框架实现
- 京东探索研究院 34 篇论文入选 CVPR 2022
- 有了数据湖探索服务,企业决策“新”中有数
- Unity3d中使用百度语音识别及语音合成【含源码】
- 最小二乘法拟合圆公式推导及vc实现[r]
- 雷云云服务器文件夹,配置文件云存储 雷蛇Synapse2.0_雷蛇鼠标_键鼠评测-中关村在线...
- 小程序图片实现自适应大小,超过部分自动裁剪
- 小程序 用户反馈_用户反馈如何提高我的应用程序的安全性
- drools决策表的简单使用
- 给大家推荐一个比较好的VC论坛【VC驿站】
- 国家邮政局出马,菜鸟顺丰大战落幕
- PLC SECS/GEM解决方案,设计与应用
热门文章
- Linux接蓝牙音响无声音,win10蓝牙音箱没有声音怎么办_win10蓝牙音响连接成功没声音处理方法...
- Infor CloudSuite Industrial (SyteLine) IDO 行授权 设置
- (附源码)springboot宠物管理系统 毕业设计 121654
- 离散帕斯瓦尔定理、帕斯瓦尔定理的证明
- clion-debug调试步骤
- 计算文件MD5值的多种方法
- matlab模型预测控制基本原理,matlab模型预测控制
- 10. logback详解,Flink流处理案例及Hive和Hbase的整合
- if (resultCode == RESULT_OK) 在红米手机上resultCode返回并不是RESULT_OK
- 如何从官网下载Chrome浏览器离线安装包