开放平台如何设计安全的对外接口

[提前声明]
文章由作者:张耀峰 结合自己生产中的使用经验整理,最终形成简单易懂的文章
写作不易,转载请注明,谢谢!
大数据代码案例地址: https://github.com/Mydreamandreality/sparkResearch


场景

开放平台需要提供对外的接口,保障数据安全和客户真实性

  • 1、传输的数据加密
  • 2、客户端的身份鉴别
  • 3、签名机制防止数据被篡改
  • 4、时间戳机制
  • 5、限流、降权机制
  • 6、黑名单

通过以上的设计,可以构建出一个基本的安全架构

详细设计

  • 1、传输的数据加密

如果大家使用过wireshark或者fiddler之类的抓包工具,就知道数据在传输的过程中是很容易被抓包的,如果我们使用http协议来传输我们的数据,就跟裸奔是一样的,明文数据全部暴露在了外面,所以成熟的解决方案是应该使用HTTPS协议传输,在我们的http层和tcp层增加SSL加密层,对传输数据进行加解密,甚至一些不需要明文处理的数据,可以直接通过hash+盐或者其它不可逆的算法来对数据进行传输,验证只需要对比hash值即可

这里的不可逆也不是绝对的,一般来讲只能提高逆向的难度,比如彩虹表攻击,举个栗子: 一个密文你需要十年的时间才能逆向出来明文,对于防护方来说,这是可以接受的,所以在传统的安全对抗中,我们不能完全的低档攻击方,那这个时候换个思路,你可以攻破我,但你最少需要十年的时间

彩虹表攻击:
彩虹表是一个用于加密散列函数逆运算的预先计算好的表, 为破解密码的散列值(或称哈希值、微缩图、摘要、指纹、哈希密文)而准备

  • 2、客户端鉴权

我们随便找一个开放平台,在调用开放平台接口之前都需要先登录,然后再申请Appid和AppSerect,Appid的作用就是标识不同的租户,AppSerect是传输中实现加密功能的密钥,通过Appid和AppSerect生成对应的access_token传输给开放平台,开放平台服务端进行相关的验证,例如:验证该用户是否是黑名单用户,是否有权限使用该接口等等

钉钉开放平台中的做法是需要appid和appserect请求生成access_token,这个value由钉钉直接写入到租户业务系统的数据库中,租户请求需要携带access_token,有效时长为二十分钟,过期需要租户重新请求新的token

  • 3、签名机制防止数据篡改

外网有https,其实数据是没必要再次签名的,但是我们要考虑到数据传输不只是经过外网,还有内网,在内网传输这个过程中的安全保障就需要签名机制

之前和钉钉合作开发的时候,是我们提供接口给钉钉客户端使用,所以需要我们用appid来申请公钥,钉钉用本次申请的公钥所对应的私钥对数据做数字签名,我们接收到请求后用公钥进行验签

  • 4、时间戳机制

这样设想一下,我们的数据传输都是密文,也有数字签名来保障数据安全性,但是我抓到你的包后,我不管你的传输内容是什么,我可以直接复用本次请求,来拿到你的响应内容,所以我们需要额外的增加时间戳机制,来验证本次的请求是否为过期请求

时间戳机制可以和数字签名配合使用,例如在请求中增加RequestTimestamp字段,增加数字签名防止篡改,服务端收到租户的请求后公钥验签,进行时间戳的验证,如果该请求是当前时间五分钟之前的,则拒绝访问

  • 5、限流、降权

访问我们的平台是需要用appid换取access_token的,这一步就可以过滤掉非正常用户的请求,但如果是正常用户,在一段时间内出现了频繁调用接口的行为,也需要做降权或者限流的策略

使用令牌桶算法或者借助Redis来实现限流算法,针对同一appid的限流

  • 6、黑名单

如果正常用户产生了触发阈值的非法操作(比如:每分钟5次的恶意请求),此时我们应该增加黑名单机制,把该租户的appid加入至黑名单,下次请求直接拒绝,返回业务拒绝码


代码会同步更新到easyBoot项目中,具体的实现思路讲解会同步到博客,后续可以关注下~

系统架构设计-安全篇相关推荐

  1. 阿里年薪百万架构师分享「亿级并发系统架构设计」全彩版技术手册,只能说其实高并发不难

    什么是高并发? 并发是操作系统领域的一个概念,指的是一段时间内多任务流交替执行的现象 高并发用来指大流量.高请求的业务情景,比如春运抢票,电商双十一,秒杀大促等场景. 高并发的指标有 响应时间:系统对 ...

  2. 系统架构设计_系统工程师--系统架构设计

    系统架构设计包含硬件架构和软件架构,功能的模块化和描述输入输出是基本思维.并且系统架构设计是做系统级失效模式影响分析(SFMEA)的输入. 硬件架构设计是根据ISO26262-2018第5章中的附录D ...

  3. petshop4.0 具体解释之中的一个(系统架构设计)

    前言:PetShop是一个范例,微软用它来展示.Net企业系统开发的能力.业界有很多.Net与J2EE之争,很多数据是从微软的PetShop和Sun的PetStore而来.这样的争论不可避免带有浓厚的 ...

  4. 亿万级图数据库 Nebula Graph 的数据模型和系统架构设计

    Nebula Graph:一个开源的分布式图数据库.作为唯一能够存储万亿个带属性的节点和边的在线图数据库,Nebula Graph 不仅能够在高并发场景下满足毫秒级的低时延查询要求,还能够实现服务高可 ...

  5. petshop4.0 详解之一(系统架构设计)

    前言:PetShop是一个范例,微软用它来展示.Net企业系统开发的能力.业界有许多.Net与J2EE之争,许多数据是从微软的PetShop和Sun的PetStore而来.这种争论不可避免带有浓厚的商 ...

  6. PetShop的系统架构设计[转]

    <解剖PetShop>系列之一 前言:PetShop是一个范例,微软用它来展示.Net企业系统开发的能力.业界有许多.Net与J2EE之争,许多数据是从微软的PetShop和Sun的Pet ...

  7. [转]PetShop的系统架构设计

    <解剖PetShop>系列之一 前言:PetShop是一个范例,微软用它来展示.Net企业系统开发的能力.业界有许多.Net与J2EE之争,许多数据是从微软的PetShop和Sun的Pet ...

  8. 系统架构设计的工程与艺术(0)

    对于系统架构设计,我现在是功力不够,境界还凑合,俗称眼高手低是也.功力不够只能一点一点地练,一点一点的涨了,还不知道什么时候能有所小成.不过有境界也算是一件好事情,所以这个系列会先聊一聊境界方面. 之 ...

  9. 《程序员》2014年11月刊:电商峰值系统架构设计

    双11来临之际,<程序员>以"电商峰值系统架构设计"为主题,力邀京东.当当.小米.1号店.海尔商城.唯品会.蘑菇街.麦包包等电商企业,及商派.基调网络等服务公司,分享电 ...

最新文章

  1. Android报错:java.lang.NoClassDefFoundError: Failed resolution of: Ljava/util/Base64;如何解决
  2. RocketMQ工作原理 高级功能介绍
  3. 以图搜图 图像匹配_图像匹配,基于深度学习DenseNet实现以图搜图功能
  4. 一文了解Redis持久化
  5. 磁盘Raid方案简单对比
  6. 19个强大、有趣、又好玩的 Linux 命令!
  7. 什么是whois? (whois的概念及应用)
  8. 获得密钥_《哪吒》公映密钥延期一个月?关于“密钥延期”的全揭秘来了
  9. 微信授权登录实现分析
  10. (逆向工程)Android一键脱壳工具(MDEX)
  11. 7-33 电话聊天狂人
  12. 游戏评测HTML5网站模板是一款适合游戏视频 游戏评测 游戏介绍网站模板。
  13. 索尼Xperia XZ1拆机换上听筒和电池
  14. 2021软件评测师真题
  15. [转]人生多磨难 句句皆精华
  16. JavaWeb网上书城项目总结(初步1.0)
  17. 杨柳絮-Info:春天将不再漫天飞“雪”,济源治理杨柳絮在行动
  18. Hadoop入门系列(二)idea配置hadoop开发环境
  19. feshshop centos 镜像
  20. 什么是超大规模数据中心?它们是如何工作的?

热门文章

  1. Python编程从入门到实践 -----第3章、列表简介(课后习题答案)
  2. Spark Core快速入门系列(5) | RDD 中函数的传递
  3. 免费算力平台——九天毕昇
  4. 2020年度开发者工具Top 100名单!你用过几个...
  5. 16.引言篇——自定义过滤器及标签
  6. jsvascript === 和==的区别
  7. android蓝牙发送文件夹里,Android蓝牙发送文件问题
  8. spring思维导图
  9. AtCoder Regular Contest 084
  10. 使用gitee+gitbook搭建个人在线电子书