前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >第三方API对接如何设计接口认证?

第三方API对接如何设计接口认证?

作者头像
陶陶技术笔记
发布2021-07-23 13:38:22
2.1K0
发布2021-07-23 13:38:22
举报
文章被收录于专栏:陶陶技术笔记陶陶技术笔记

点击上方“陶陶技术笔记”关注我

回复“资料”获取作者整理的大量学习资料!

一、前言

在与第三方系统做接口对接时,往往需要考虑接口的安全性问题,本文主要分享几个常见的系统之间做接口对接时的认证方案。

二、认证方案

例如订单下单后通过 「延时任务」 对接 「物流系统」 这种 「异步」 的场景,都是属于系统与系统之间的相互交互,不存在用户操作;所以认证时需要的不是用户凭证而是系统凭证,通常包括 「app_id」「app_secrect」

app_id与app_secrect由接口提供方提供

2.1. Baic认证

这是一种较为简单的认证方式,客户端通过明文(Base64编码格式)传输用户名和密码到服务端进行认证。

通过在 Header 中添加key为 Authorization,值为 Basic 用户名:密码的base64编码,例如app_id为和app_secrect都为 zlt,然后对 zlt:zlt 字符进行base64编码,最终传值为:

代码语言:javascript
复制
Authorization: Basic emx0OnpsdA==
2.1.1. 优点

简单,被广泛支持。

2.1.2. 缺点

安全性较低,需要配合HTTPS来保证信息传输的安全

  1. 虽然用户名和密码使用了Base64编码,但是很容易就可以解码。
  2. 无法防止 「重放攻击」「中间人攻击」

2.2. Token认证

使用 Oauth2.0 中的 客户端模式 进行Token认证,流程如下图所示:

使用Basic认证的方式获取access_token之后,再通过token来请求业务接口

2.2.1. 优点

安全性相对 Baic认证 有所提升,每次接口调用时都使用临时颁发的 access_token 来代替 用户名和密码 减少凭证泄漏的机率。

2.2.2. 缺点

依然存在 Baic认证 的安全问题。

2.3. 动态签名

在每次接口调用时都需要传输以下参数:

  • 「app_id」 应用id
  • 「time」 当前时间戳
  • 「nonce」 随机数
  • 「sign」 签名

其中sign签名的生成方式为:使用参数中的 app_id + time + nonce 在最后追加 app_secrect 的字符串进行md5加密,并全部转换成大写。

如果需要实现参数的防篡改,只需把接口所有的请求参数都作为签名的生成参数即可

2.3.1. 优点

安全性最高

  1. 服务端使用相同的方式生成签名进行对比认证,无需在网络上传输 app_secrect
  2. 可以防止 「中间人攻击」
  3. 通过 time 参数判断请求的时间差是否在合理范围内,可防止 「重放攻击」
  4. 通过 nonce 参数进行幂等性判断。
2.3.2. 缺点

不适用于前端应用使用,js源码会暴露签名的方式与app_secrect

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-07-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 陶陶技术笔记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、前言
  • 二、认证方案
    • 2.1. Baic认证
      • 2.1.1. 优点
      • 2.1.2. 缺点
    • 2.2. Token认证
      • 2.2.1. 优点
      • 2.2.2. 缺点
    • 2.3. 动态签名
      • 2.3.1. 优点
      • 2.3.2. 缺点
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档