安全架构-api接口幂等性设计

安全架构-api接口幂等性设计

今天开始研究API接口相关的安全性,api接口在当前互联网开发,分布式RPC,微服务架构,RESTful架构中,应用非常广泛,注意api接口的安全,也是架构师必须熟练且牢记的意识和技能。


api接口安全按我的理解,可分为调用安全和业务安全。调用安全是要保证api被正确合法的调用,包括是否被授权,是否被限流,数据传递是否安全等。
业务安全是保证api接口业务处理时的安全,其中本文要讲述的接口幂等性设计我将其归纳为业务安全。

文章目录

  • 安全架构-api接口幂等性设计
  • 前言
  • 一、什么是幂等性?
  • 二、解决方案
    • 1.实际业务参数控制
    • 2.API参数控制
  • 总结


前言

本文只讲述API接口设计的幂等性,用于在工作中提供微服务,给第三方提供业务接口,给内部服务提供业务接口时,保障自身业务的安全;通过研读资料,另外有一部分知识HTTP的幂等性,则不在本文中讲述,。


一、什么是幂等性?

在数学里,幂等有两种主要的定义:- 在某二元运算下,幂等元素是指被自己重复运算(或对于函数是为复合)的结果等于它自己的元素。例如,乘法下唯一两个幂等实数为0和1。即 s *s = s- 某一元运算为幂等的时,其作用在任一元素两次后会和其作用一次的结果相同。例如,高斯符号便是幂等的,即f(f(x)) = f(x)。

简述为:方法执行1次与执行N次所产生的影响相同,不会因为多次调用执行而产生了副作用(对后端资源的影响,不一定是返回值)。

举个栗子:支付,用户购买商品后支付,支付扣款成功,但是返回结果的时候网络异常,此时钱已经扣了,用户再次点击按钮,此时会进行第二次扣款,返回结果成功,用户查询余额返发现多扣钱了,流水记录也变成了两条,这就没有保证接口的幂等性,这就是有问题。

二、解决方案

1.实际业务参数控制

1、如上述支付问题,则根据订单号判断,同一个订单号,只能被支付一次;orderid:
2、用户数据问题,userid,判断一个用户是否已经有数据,唯一约束;
此方式需要确定该业务是有传递唯一健值。

2.API参数控制

  1. 使用Token
    使用token的方式,则token由后端生成,第三方或客户端需每次获取token,token使用一次后即失效。后台处理该token值。可存在redis或应用内存。 分布式架构中用redis,单体应用可以存应用内存中。
  2. 使用请求来源和请求序列号Sequence
    请求序列号seq的方式,则服务端需保存seq,对于同一个请求来源的的同一个seq做判断,只处理一次。此种方式,则需要客户端自己维护唯一的seq,每次的重新调用时,使用新的seq.

总结

理解了幂等性解决的思路,在实际的代码处理过程中就很容易处理。后续文章将解读数据库操作的幂等和HTTP协议的幂等。

你可能感兴趣的:(安全架构,安全,接口,api)