给第三方系统提供接口,需要注意什么?

248 阅读3分钟

最近,在给第三方系统提供http接口,总结一下给第三方系统提供接口,应该需要注意哪些。

鉴权

API密钥身份认证

1.API密钥生成: 为每个三方应用生成唯一的API密钥对(AK/SK),其中AK用于标识应用,SK用于进行签名和加密。

AK:Access Key Id,用于标示用户。

SK:Secret Access Key,是用户用于加密认证字符串和用来验证认证字符串的密钥,其中SK必须保密。

通过使用Access Key Id / Secret Access Key加密的方法来验证某个请求的发送者身份。

2.接口鉴权: 在进行接口调用时,客户端需要使用AK和请求参数生成签名,并将其放入请求头或参数中以进行身份验证。

签名认证

1.分配appId(开发者标识)和appSecret(密钥),给不同的调用方

可以直接通过平台线上申请,也可以线下直接颁发。appId是全局唯一的,每个appId将对应一个客户,密钥appSecret需要高度保密。

2.加入timeStamp(时间戳),以服务端当前时间为准,单位为ms ,5分钟内数据有效

时间戳的目的就是为了减轻DOS攻击。防止请求被拦截后一直尝试请求接口。服务器端设置时间戳阀值,如果服务器时间减请求时间戳超过阀值,表示签名超时,接口调用失败。

3.加入临时流水号nonce,至少为10位 ,有效期内防重复提交。

随机值nonce 主要是为了增加签名sign的多变性,也可以保护接口的幂等性,相邻的两次请求nonce不允许重复,如果重复则认为是重复提交,接口调用失败。

  • 针对查询接口,流水号只用于日志落地,便于后期日志核查。
  • 针对办理类接口需校验流水号在有效期内的唯一性,以避免重复请求。

通过在接口签名请求参数加上 时间戳timeStamp + 随机数nonce 可以防止 ”重放攻击“

限流

典型的限流算法有:滑动窗口算法、漏斗算法、令牌桶算法,常用的限流工具有阿里的sentinel,单机的限流如google guava 的RateLimiter

安全

  • 使用HTTPS协议进行数据传输,以保护通信过程中的数据安全。
  • 对敏感数据进行加密传输,例如使用TLS加密算法对敏感数据进行加密

日志

记录第三方接口的出入参,方便排查问题,可以使用MongoDB进行存储,因为MongoDB支持海量存储,支持json格式数据

接口文档

推荐使用swagger2,既可以在线查看,也可以生成离线接口文档

版本控制

要注意向下兼容,兼容之前的老版本,一般接口地址都会带上版本号,如http://ip:port//v1/list , http://ip:port//v2/list**