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

一、前言
在与第三方系统做接口对接时,往往需要考虑接口的安全性问题,本文主要分享几个常见的系统之间做接口对接时的认证方案。
二、认证方案
例如订单下单后通过 延时任务 对接 物流系统 这种 异步 的场景,都是属于系统与系统之间的相互交互,不存在用户操作;所以认证时需要的不是用户凭证而是系统凭证,通常包括 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编码,最终传值为:
Authorization: Basic emx0OnpsdA==
2.1.1. 优点
简单,被广泛支持。
2.1.2. 缺点
安全性较低,需要配合HTTPS来保证信息传输的安全
- 虽然用户名和密码使用了Base64编码,但是很容易就可以解码。
- 无法防止 重放攻击 与 中间人攻击。
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. 优点
安全性最高
- 服务端使用相同的方式生成签名进行对比认证,无需在网络上传输
app_secrect。 - 可以防止 中间人攻击。
- 通过
time参数判断请求的时间差是否在合理范围内,可防止 重放攻击。 - 通过
nonce参数进行幂等性判断。
2.3.2. 缺点
不适用于前端应用使用,js源码会暴露签名的方式与app_secrect
扫码关注有惊喜!

第三方API对接如何设计接口认证?的更多相关文章
- 使用Flask设计带认证token的RESTful API接口
大数据时代 Just a record. 使用Flask设计带认证token的RESTful API接口[翻译] 上一篇文章, 使用python的Flask实现一个RESTful API服务器端 简 ...
- 开放接口/RESTful/Api服务的设计和安全方案
总体思路 这个涉及到两个方面问题:一个是接口访问认证问题,主要解决谁可以使用接口(用户登录验证.来路验证)一个是数据数据传输安全,主要解决接口数据被监听(HTTPS安全传输.敏感内容加密.数字签名) ...
- 如何更优雅地对接第三方API
本文所有示例完整代码地址:https://github.com/yu-linfeng/BlogRepositories/tree/master/repositories/third 我们在日常开发过程 ...
- API接口认证
restful API接口可以很方便的让其他系统调用,为了让指定的用户/系统可以调用开放的接口,一般需要对接口做认证; 接口认证有两种方式: 1.认证的token当做post/get的参数,serve ...
- 最安全的api接口认证
最安全的api接口认证 实现步骤: 1.客户端与服务器都存放着用于验证的Token字段,客户端在本地把自己的 用户名+时间戳+Token 组合进行MD5加密后生成一段新的md5-token. 2.客户 ...
- REST API权限集成设计
REST API权限集成设计 应用分为两大部分,前端html+后端Rest服务,前端html和后端Rest服务部署完全分离. 目标:可访问资源都处于权限控制之下(意味着通过浏览器地址栏的任意url都会 ...
- 用vetr.x写一个HTTP接口适配器, 对接各种形式接口
用vetr.x写一个HTTP接口适配器, 对接各种形式接口 项目地址:https://github.com/hjx601496320/transmit 业务说明 在日常开发工作中,我们经常会遇到要和各 ...
- 后台API服务的设计考虑
我在<写在最前>里说过,后台API的文档至关重要.不过,文档只是外在表现形式,设计才是真正的灵魂.我在这篇博文主要介绍的就是我在后台开发过程中,设计API时的考虑.我只说他是考虑,因为很多 ...
- App 组件化/模块化之路——使用SDK的思路进行模块化设计接口
在不久之前分享一篇<App 组件化/模块化之路——如何封装网络请求框架>文章介绍了我在项目中封装网络请求框架的思路.开发一个 App 会涉及到很多网络请求 API ,例如登录注册接口.用户 ...
随机推荐
- UI设计师、平面设计师常用的网站大全,初学者必备,大家都在用!
UI设计师.平面设计师常用的网站大全,初学者必备,大家都在用! 国外的花瓣--Pinterest • The world's catalog of ideas 颜格视觉--app界面设计大全--电商. ...
- 有哪些适用于律师事务所的CRM系统?
中国的经济发展和政治稳定给律师行业带来了巨大的空间.而互联网的发展也让律师事务所遍地开花.如何在大大小小的律所中脱颖而出,是每个律所都迫切需要解决的问题.为了让您的律师事务所在激烈的竞争中脱颖而出,今 ...
- 在ActiveMQ中使用SingleConnectionFactory遇到的坑
我们在生产环境使用了ActiveMQ作为消息中间件,消息中间件连接到数据库对消息进行持久化. 最近发生了一个奇怪的事情,消费者端的生产日志总是报如下错误: The JMS connection has ...
- 33.2.NIO
4.1概述[理解] BIO Blocking IO,阻塞型IO NIO No Blocking IO,非阻塞型IO 阻塞IO的弊端 在等待的过程中,什么事也做不了 非阻塞IO的好处 不需要一直等待,当 ...
- UltraISO制作启动盘安装CentOS7
UltraISO制作启动盘安装CentOS7 发表于 2020-03-10 | 分类于 DevOps | 没有评论 简单几个步骤即可完成启动盘的制作,非常便利 准备工具 准备8G优盘(启动盘制 ...
- kubernetes 监控(14)
一.Weave Scope 容器地图 创建 Kubernetes 集群并部署容器化应用只是第一步.一旦集群运行起来,我们需要确保一切正常,所有必要组件就位并各司其职,有足够的资源满足应用的需求.Kub ...
- 发现新大陆 --21lic
21lic网上发单平台 http://project.21ic.com/p/97250
- SpringBoot基础学习(三) 自定义配置、随机数设置及参数间引用
自定义配置 SpringBoot免除了项目中大部分手动配置,可以说,几乎所有的配置都可以写在全局配置文件application.peroperties中,SpringBoot会自动加载全局配置文件从而 ...
- windows下nginx配合nodejs进行反向代理
本文原创,转载请附上原作者链接!https://www.cnblogs.com/LSWu/articles/14848324.html 1.安装node.js 从node.js官网上下载node.js ...
- 使用指定源安装python包
对于经常需要按照那个python包的同学,外网下载比较慢的话,可以使用公司内部的镜像进行安装 eg: pip install django -i http://mirrors.***.com.cn/p ...