文章目录

  • 开放平台API接口加密,签名策略
    • 参考各大平台策略
      • 支付宝
      • 微信
    • 签名的概念与方法
      • 2.1 为什么要签名?
    • 2.2 签名算法过程
      • 2.2.1 APPKEY+签名认证
      • 2.2.2 token+签名认证
      • 2.2.3 https模式
  • 开放平台如何防御DDOS攻击?

在设计开放平台接口过程中,往往会涉及接口传输安全性相关的问题,加上之前面试中也被问到项目中开放平台的安全相关问题,因此有时间整理下思路,对于接口加密及签名的相关知识做了一个系统性的总结

开放平台API接口加密,签名策略

参考各大平台策略

支付宝

支付: appid+ PrivateKey私匙

转账+退款:1.RSA2(非对称)公匙加密 2.根证书 3.应用公匙证书

func (s *transferAccountService) newClient() *alipay.Client {client, err := alipay.New(conf.AliPayAppID, conf.AliPayPrivateKey, true)if err != nil {panic(err)}if err := client.LoadAppPublicCertFromFile(fmt.Sprintf("appCertPublicKey_%s.crt", conf.AliPayAppID)); err != nil {panic(err)}_ = client.LoadAliPayRootCertFromFile("alipayRootCert.crt")_ = client.LoadAliPayPublicCertFromFile("alipayCertPublicKey_RSA2.crt")return client
}

微信

支付: MCHID(实物商户号)+APIKey 必须

  • 小程序支付和微信支付
    1.都需要设置参数的paySign签名,
    2.设置timestamp验证请求是否过期
  • h5
    则不需要

退款:1.商户API证书

func (s *RefundService) newClient() *wxpay.Client {account := wxpay.NewAccount(s.AppId, conf.MCHID, conf.APIKey, false)account.SetCertData("apiclient_cert.p12")return wxpay.NewClient(account)
}

签名的概念与方法

2.1 为什么要签名?

1) 在客户端与服务器进行交互时,报文虽然加密了,但我们并不能确认这个报文是谁发过来的。例如,与第三方服务器B进行交互时,我方收到了一个已加密的请求,但我方并不能确认是服务器B发送的这个报文,此时我们可以用数字签名的方式来进行验证。作用:认证数据来源

2) 如果我方收到一个B服务器签名的请求,那么B服务器也无法否认这个请求,因为带有它的签名,作用:抗否认性。

3) 我方收到一个B服务器签名的请求,但我方并不能确认这个请求是否被篡改过(虽然报文加了密,也可能被篡改),此时即可用签名,验证签名中的报文与传过来的报文是否一致。作用:保证了数据的完整性

2.2 签名算法过程

签名的方式多种多样,常见的形式如下:

2.2.1 APPKEY+签名认证

1) 对除签名外的所有请求参数按key做的升序排列,value无需编码。(假设当前时间的时间戳是12345678)

例如:有c=3,b=2,a=1 三个参,另加上时间戳后, 按key排序后为:a=1,b=2,c=3,_timestamp=12345678。

2) 把参数名和参数值连接成字符串,得到拼装字符:a1b2c3_timestamp12345678

3) 用申请到的appkey 连接到接拼装字符串头部和尾部,然后进行32位MD5加密,最后将到得MD5加密摘要转化成大写。

示例:假设appkey=test,md5(testa1b2c3_timestamp12345678test),取得MD5摘要值 C5F3EB5D7DC2748AED89E90AF00081E6 。

风险在于一但appkey被别人获取,即可仿照签名,造成安全性问题

2.2.2 token+签名认证

token+签名认证的主要原理是:

1) 做一个认证服务,提供一个认证的webapi,用户提交相关身份信息如供应商编码,先访问它

2) 服务端收到请求,去验证相关身份信息,验证成功后,服务端会签发一个token,token一般可以存储在缓存或数据库中,以方便后面查询出来进行验证。再把这个 Token 发送给客户端

3) 客户端收到 token 以后可以把它存储起来,比如放在 Cookie 里或者 Local Storage 里;客户端每次向服务端请求资源的时候拿着相应的token以及请求的参数和服务器端提供的签名算法计算出签名后再去访问指定的api

6,服务端收到请求,就获取对应用户的token和请求参数,服务器端再次计算签名和客户端签名做对比,如果验证通过则正常访问相应的api,验证失败则返回具体的失败信息

安全的关键在于参与签名的token,整个过程中token是不参与通信的,所以只要保证token不泄露,请求就不会被伪造。然后我们通过timestamp时间戳用来验证请求是否过期,这样就算被人拿走完整的请求链接也是无效的

2.2.3 https模式

追求安全可以考虑https的双向验证模式 + 参数的sign签名的规则双重验证达到安全的请求后台

开放平台如何防御DDOS攻击?

上层:
关闭不必要的端口
云厂商ddos基础防护
高防服务器

服务层:
1.slb+nginx集群+(k8s集群or多机器)
2.服务限流、熔断
3.

《后端》开放平台API安全设计相关推荐

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

最新文章

  1. 2021-08-27 分割之后mask在原图中提取出来(语义分割—实例分割)
  2. 你为什么“啃不动”你手中的技术书?
  3. php 如何启动ica文件,IE11打开ICA文件时无法直接调用Citrix Receiver?
  4. python用代码安装3.6_Python3.6安装及引入Requests库的实现方法
  5. Beta版本发布报告
  6. Servlet API
  7. Web设计师须知的10项SEO技巧
  8. Oracle数据库常用undo查询思路
  9. JavaWeb项目文件夹生成Zip压缩包并下载到本地
  10. 计算机网络网络层之数据报网络
  11. 启动FastDFS,安装nginx,整合fdfs与nginx,进行上传下载测试
  12. edxp显示未安装_EPLAN因缺少加密狗驱动而无法安装解决方案
  13. KALI利用MS17-010漏洞入侵
  14. CVS版本控制-冲突解决方法
  15. 介入治疗在胰腺癌的作用
  16. 千叶加密php,哪位大侠可以透漏一下千叶素是什么?
  17. 奥利给! loading效果这么搞真的太棒了
  18. 用Python做个美少女大战小怪兽
  19. 如何把图片上的文字转换成word?
  20. 国产数据库kingbase

热门文章

  1. 2023上学期学习计划
  2. html移动端语音波纹,html5 +css3 点击后水波纹扩散效果 兼容移动端
  3. ARM-9 4412板、linux-3.14内核、usb转串口pl2303驱动的移植相关问题
  4. 项目中使用过的Soc
  5. android学习笔记----ListView和各种适配器简介
  6. [计算机基础]整理计算机的数据计量单位
  7. Error while executing topic command:KeeperErrorCode=NoNode for /brokers/ids
  8. GitHub克隆下载加速
  9. 【快速上手系列】使用Springboot集成Swagger2的简单使用测试
  10. 静态综合实验(企业内网访问外网工程)