项目API接口鉴权流程总结
权益需求对接中,公司跟第三方公司合作,有时我们可能作为甲方,提供接口给对方,有时我们也作为乙方,调对方接口,这就需要API使用签名方法(Sign)对接口进行鉴权。每一次请求都需要在请求中包含签名信息, 以验证用户身份,不然任何人都可以调我们公司的接口,会导致安全隐患。
思路:在接口请求参数都带上appKey,签名sign和时间戳timestamp等字段。
假如我们是甲方时,那么需要让乙方在目标网站上申请或者给乙方提供安全凭证(appKey和appSecret),其中 appKey是用于标识 API 调用者的身份,appSecret是用于加密签名字符串和服务器端验证签名字符串的密钥。appSecret必须严格保管。避免泄露。
乙方(对方)需要做
根据甲方(我们)提供appSecret和需要传的特定参数生成的签名sign,最后在接口的url参数拼接上,签名sign,时间戳timestamp和appKey等参数。
具体步骤如下:
1. 对参数进行排序和拼接
首先对请求参数按参数名做字典序升序(自然顺序)排列,然后格式化特定的形式,例如 k=v的形式,同时参数间使用"&"拼接在一起,或者kv的形式,不用"&"拼接的形式(注意不包括签名Sign参数,v为原始值而非url编码后的值)。
示例 采用k=v的形式,同时参数间使用"&"拼接在一起
appkey=00159&from=51916&phone=13612549848&thirdOrderId=768169123×tamp=2020-10-22 17:39:08&ver=3.4
2. 使用特定的加密算法进行加密(Md5,SHA),再进行大小写格式化等操作
String sig = MD5Utils.EncoderByMd5(appSecret + “参数进行排序和拼接后的字符串”+ appSecret).toLowerCase().substring(0, 30);
3. url拼接签名sign,时间戳timestamp和appKey等参数
StringBuilder stringBuilder = new StringBuilder(url);
if (url.contains("?")) {
stringBuilder.append("&client_id=").append(clientId)
.append("&ext_user_id=").append(phead.getUserId())
.append("&sign=").append(sign)
.append("×tamp=").append(timestamp)
.append("&phone=").append(phone)
.append("&callback_info=").append(phead.getUserId());
}
项目实战
示例1

示例2

我们(甲方)要做
拿到对方请求我们传过来的参数中的签名sign和appKey和时间戳等字段,然后通过appKey去获得对应的密码appSecret(这两个参数appKey和appSecret是我们定义后给乙方的),我们通过和乙方一样的方式生成签名sign2,最后比较对方传过来的sign值和我们以同样方式生成得到的sign2是不是一致,一致签名验证就通过,不一致签名就是失败;
注意:有了签名,基本上数据的合法性就得到了保障。只要坏人没有秘钥就无法伪造调用方的请求。但坏人依然可以截取调用方的请求,不停的发送给服务端,造成服务端资源紧张、数据错误等不好的结果。为了防止同样的请求多次发送,我们往往还要求调用方提供一个唯一的序列号,比如UUID、时间戳之类的。服务端需要在收到请求的第一时间校验该唯一序列号。我们可以通过spring的切面或者拦截器来做。
参考/好文
https://www.web3.xin/index/article/156.html
项目API接口鉴权流程总结的更多相关文章
- laravel JWTAuth实现api接口鉴权(基础篇)
官网:https://jwt-auth.readthedocs.io 参考:https://learnku.com/articles/10885/full-use-of-jwt#99529f 1.to ...
- 接口鉴权之sign签名校验与JWT验证
需求描述: 项目里的几个Webapi接口需要进行鉴权,同接口可被小程序或网页调用,小程序里没有用户登录的概念,网页里有用户登录的概念,对于调用方来源是小程序的情况下进行放权,其他情况下需要有身份验证. ...
- EasyNVR摄像机网页H5全平台无插件直播流媒体播放服务二次开发之接口鉴权示例讲解
背景需求 EasyNVR的使用者应该都清楚的了解到,EasyNVR一个强大的功能就是可以进行全平台的无插件直播.主要原因在于rtsp协议的视频流(默认是需要插件才可以播放的)经由EasyNVR处理可以 ...
- 使用JWT设计SpringBoot项目api接口安全服务
转载直: 使用JWT设计SpringBoot项目api接口安全服务
- [转]使用nodejs-koa2-mysql-sequelize-jwt 实现项目api接口
本文转自:https://blog.csdn.net/yibowanbo/article/details/80521849 nodejs-koa2-mysql-sequelize-jwt技术栈:nod ...
- 使用nodejs-koa2-mysql-sequelize-jwt 实现项目api接口
nodejs-koa2-mysql-sequelize-jwt 技术栈:nodejs, koa2, mysql, sequelize, jwt 项目数据层和操作层分明 使用koa2框架中间件,参数处理 ...
- HiMall 3接口鉴权参考
签名算法 为了防止API调用过程中被黑客恶意篡改,调用任何一个API都需要携带签名,HOP服务端会根据请求参数,对签名进行验证,签名不合法的请求将会被拒绝.TOP目前支持的签名算法只有一种:MD5(s ...
- 接口鉴权,提供给第三方调用的接口,进行sign签名
//场景:公司要跟第三方公司合作,提供接口给对方对接,这样需要对接口进行授权,不然任何人都可以调我们公司的接口,会导致安全隐患: 思路: 在每个接口请求参数都带上ApiKey 和sign签名: 我们在 ...
- Asp.net Core 项目API接口服务器部署
Windows server 2008服务器部署: DotNetCore.1.0.0.RC2-WindowsHosting 或者DotNetCore.1.0.5_1.1.2-WindowsHostin ...
随机推荐
- sklearn决策树应用及可视化
from sklearn import datasets from sklearn.tree import DecisionTreeClassifier 1.载入iris数据集(from sklear ...
- 深入剖析HashMap
前言 很高兴遇见你~ HashMap是一个非常重要的集合,日常使用也非常的频繁,同时也是面试重点.本文并不打算讲解基础的使用api,而是深入HashMap的底层,讲解关于HashMap的重点知识.需要 ...
- window下kettle安装
参考这篇文章 http://note.youdao.com/noteshare?id=a8c536ba952a48d60d7ea8f2cc61a94b
- HashMap相关类:Hashtable、LinkHashMap、TreeMap
前言 很高兴遇见你~ 在 深入剖析HashMap 文章中我从散列表的角度解析了HashMap,在 深入解析ConcurrentHashMap:感受并发编程智慧 解析了ConcurrentHashMap ...
- (干货)构建镜像之Dockerfile
Dockerfile是一个文本文件,记录了镜像构建的所有步骤. 饭提示:学习Dockerfile构建镜像,就是在学习Dockerfile文件构建的命令+shell脚本语句 Dockerfile简单介绍 ...
- tornado 作业 简单首页 登录页 个人中心
s4 index.py 1 import tornado.ioloop 2 import tornado.web 3 import time 4 5 6 class IndexHandler(torn ...
- 使用 open 函数 写的代码 用户名登录
先创建文件ha.log 内容: aaa$$123bbb$$456 def dl(user,pas): f = open('ha.log', 'r', encoding="utf-8" ...
- 【网盘下载加速器】可爆破提取码 加速高达20M以上
[软件名称]:网盘下载加速 [软件版本]:1.0.0 [软件大小]:3.95MB [支持系统]:Android,4.4+及更高版本 [测试系统]:小米 [使用说明]:一款小巧的网盘 ...
- sqli-labs less38-53(堆叠注入 order by之后相关注入)
堆叠注入 less-38 less-39 less-40 less-41 less-42 less-43 less-44 less-45 考察order by相关注入 less-46 less-47 ...
- vue 分支结构
分支循环结构 分支循环结构指令 v-if v-else v-else-if v-show v-if 指令 可以直接在元素中添加指令,添加判断的值 最后运行可以得到结果是: v-show v-show ...