第三方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 ,例如登录注册接口.用户 ...
随机推荐
- work2_求交点数
教学班级:周三上午三四节 项目地址:https://github.com/875571216/- PSP表格 psp2.1 Personal Software Process Stages 预估耗时( ...
- Linux下的ARP攻击-断网
1.软件工具安装 1. nmap --网络嗅探工具 2. dsniff ( arpspoof ) --ARP嗅探工具 3. net-tools ( ifconfig ) --网络工具 sudo ...
- KMP算法以及优化(代码分析以及求解next数组和nextval数组)
KMP算法以及优化(代码分析以及求解next数组和nextval数组) 来了,数据结构及算法的内容来了,这才是我们的专攻,前面写的都是开胃小菜,本篇文章,侧重考研408方向,所以保证了你只要看懂了,题 ...
- mysql 索引十连问| 剑指 offer - mysql
以下是结合网上及此前面试时遇到的一些关于mysql索引的面试题. 若对mysql索引不太了解可先翻阅相关文章 大白话 mysql 之深入浅出索引原理 - 上 大白话 mysql 之深入浅出索引原理 - ...
- [Linux] 完全卸载mysql
参考 https://www.jianshu.com/p/ef58fb333cd6
- stressapptest测试用例testcase方法aarch64
### https://github.com/stressapptest/stressapptest aarch64 To build from source, the build/installat ...
- IT菜鸟之BIOS和VT
一.虚拟化:VT(Virtualization Technology) 二.BIOS (basic input output system基本输入输出系统) 主板优先启动--bios启动--bios开 ...
- 013.Kubernetes认证授权
一 Kubernetes认证系统介绍 1.1 访问控制 Kubernetes API的每个请求都会经过多阶段的访问控制之后才会被接受,这包括认证.授权以及准入控制(Admission Control) ...
- 单片机编程时易错总结 20181015 项目:3060-A
3060-A的调试过程中: 20181015 V1.30 A.遇到问题: RS232与LY3023的通信总是自己停止 主程序依旧执行 此版本进行如下修改: 1.RS232用的串口1关闭DMA传送 ...
- Linux系统函数read()/write()/pread()/pwrite()的区别-(转自CSDN网络)
在Linux和UNIX中有很多的输入输出函数,有时真是让想跟它攀点关系的菜鸟们束手无策.先来看看都有哪些函数,通过解析与总结,看看能不能让大家能这些函数有个理性的认识,哦,原来是这么回事,也就算我没白 ...