API接口安全设计方案(已实现)

1、背景

网络安全方案,主要从数据加密与api接口安全两个方面考虑,数据加密https已经加密了,就不再次加密了;主要从api安全方面考虑。

2、接口安全设计

在代码层面,对接口进行安全设计
一、使用token进行用户身份认证
二、使用sign防止传入参数被篡改
三、用时间戳防止暴力请求

一、使用token进行用户身份认证

用户身份认证的流程图如下:

具体说明如下:

1、 用户登录时,客户端请求接口,传入用户名和密文的密码
2、 后台服务对用户身份进行验证。若验证失败,则返回错误结果;若验证通过,则生成一个随机不重复的token,并将其存储在redis中,设置一个过期时间。
  其中,redis的key为token,value为验证通过后获得的用户信息
3、 用户身份校验通过后,后台服务将生成的token返回客户端。
  客户端请求后续其他接口时,需要带上这个token。后台服务会统一拦截接口请求,进行token有效性校验,并从中获取用户信息,供后续业务逻辑使用

二、使用sign防止传入参数被篡改

为了防止中间人攻击(客户端发来的请求被第三方拦截篡改),引入参数的签名机制。
  具体步骤如下:

1、客户端和服务端约定一个加密算法(或MD5摘要也可), 客户端发起请求时,将所有的非空参数按升序拼在一起,通过加密算法形成一个sign,将其放在请求头中传递给后端服务。
2、后端服务统一拦截接口请求,用接收到的非可空参数根据约定好的规则进行加密,和传入的sign值进行比较。若一致则予以放行,不一致则拒绝请求。

由于中间人不知道加密方法,也就不能伪造一个有效的sign。从而防止了中间人对请求参数的篡改。

三、用时间戳防止暴力请求

sign机制可以防止参数被篡改,但无法防dos攻击(第三方使用正确的参数,不停请求服务器,使之无法正常提供服务)。因此,还需要引入时间戳机制。
  具体的操作为:客户端在形成sign值时,除了使用所有参数和token外,再加一个发起请求时的时间戳。即

sign值来源 = 所有非空参数升序排序+token+timestamp

而后端则需要根据当前时间和sign值的时间戳进行比较,差值超过一段时间则不予放行。
  若要求不高,则客户端和服务端可以仅仅使用精确到秒或分钟的时间戳,据此形成sign值来校验有效性。这样可以使一秒或一分钟内的请求是有效的。
  若要求较高,则还需要约定一个解密算法,使后端服务可以从sign值中解析出发起请求的时间戳。
  总结后的流程图如下:

3、项目拟采用的方案

(1)获取token

这里还是隐藏下了。

(2)接口新增三个字段:token、timestamp、sign

{ 'address': '33', 'bussinessType': '22', 'city': '111', 'companyName': 'st232ring', 'token': 'idfajdjjlkczkvhcklgjkfsj<jjkv', 'timestamp': '20210714164139', 'sign':'fdakfljdkfjdks'}

(3)签名sign生成规则

规则:sha1(keyvalkeyval+token+timestamp+id)

例如:sha1(
address33bussinessType22city111companyNamest232ringtokentimestampid)

这里新增一个id值,与token对应,传输过程中不使用,只用于加密,保证数据即使被截获,因为请求中没有id的传输,更加安全。

(4)几个参数上面已经说过了,简单再说一句。

token身份认证;

timestamp方式防止dos攻击,防止重放,简单说就是一次接口调用,只能用一定时间,比如比对时间,60s内该次调用有效,60秒后失效;

sign签名,通过参数+token+timestamp+id固定位加密,保证参数不会被修改,调用有效;


(0)

相关推荐

  • httprunner学习3-extract提取token值参数关联

    前言 如何将上个接口的返回token,传给下个接口当做请求参数?这是最常见的一个问题了. 解决这个问题其实很简单,我们只需取出token值,设置为一个中间变量a,下个接口传这个变量a就可以了.那么接下 ...

  • 拒绝接口裸奔!开放API接口签名验证!

    接口安全问题 请求身份是否合法? 请求参数是否被篡改? 请求是否唯一? AccessKey&SecretKey (开放平台) 请求身份 为开发者分配AccessKey(开发者标识,确保唯一)和 ...

  • 国际象棋云库API接口说明

    概述 国际象棋云库(简称'云库') API 接口分为两部分,访问云库,可以直接通过基于 HTTP 的 RESTful API 实现. 此外,在原有的 UCI 引擎通讯协议上扩展了云库相关的指令,云库. ...

  • 中国象棋云库API接口说明

    中国象棋云库API接口说明 概述 中国象棋云库(简称'云库') API 接口分为两部分,访问云库,可以直接通过基于 HTTP 的 RESTful API 实现. 此外,在原有的 UCI 引擎通讯协议上 ...

  • 盘点15个好用的API接口管理神器

    分布式实验室 1周前 如今,API已在软件.Web和移动应用程序开发领域无处不在,从企业内部到面向公众的应用以及与合作伙伴进行系统集成.通过使用API,开发人员可以创建满足各种客户需求的应用程序.而软 ...

  • IOT语义互操作性之API接口

    这个系列文章描述了一个单一的语义数据模型来支持物联网和建筑.企业和消费者的数据转换. 这种模型必须简单可扩展, 以便能够在各行业领域之间实现插件化和互操作性. 对于一个目前从事智能硬件的老码农,觉得这 ...

  • 微服务架构下的API接口驱动开发,设计和集成

    今天谈下在微服务架构下,接口设计和开发方面的思考. 对于微服务架构,SOA和Http Rest API接口设计,在我前面的头条文章中均有专门的说明,因此对于基础方面的解释在本文不再重复.对于今天要写的 ...

  • 全字段多条件搜索(api接口)

    近期在做项目时遇到了一个全表全字段多条件搜索的需求,在平时搜索最常见的就是 字段+like +'% 条件%'这种模式,但遇到多条件多字段时,这种就不适用了. 表字段已知,条件未知,条件数量未知,这种情 ...

  • 马斯克的脑机接口公司称已能建侏罗纪公园:不是恐龙,而是新物种

    中国经济周刊-经济网讯 据外媒报道,马斯克旗下脑机接口公司联合创始人霍达克称,拥有在现实中建侏罗纪公园的技术.当地时间4月4日,霍达克发推称"如果我们愿意的话,我们可能会建造侏罗纪公园.但不 ...

  • python接口自动化21-规范的API接口文档示例

    前言 接口文档到底长啥样?做接口测试最大的障碍在于没有接口文档,很多公司不注重接口文档的编写,导致测试小伙伴没见过接口文档. 运气好一点的测试小伙伴可能厚着脸皮找开发要过接口文档,然而拿过来的接口文档 ...

  • API 接口四连问!问你怕不怕!

    回复'架构师'获取资源 在实际的业务中,难免会跟第三方系统进行数据的交互与传递,那么如何保证数据在传输过程中的安全呢(防窃取)?除了https的协议之外,能不能加上通用的一套算法以及规范来保证传输的安 ...