对API接口或H5接口做签名认证
参数签名认证
为了防止客户端访问的 API 接口被伪装攻击、数据泄漏等安全风险。通过与服务器端联调实现接口安全的方式,利用 API 接口签名能有效的防范这些安全问题和风险。对接口参数进行签名有如下优点:
保证请求有效性
参数变化会导致签名变化,否则将是一个无效的请求;保证请求合法性
签名算法依赖服务器分发的一对clientKey和secretKey,clientKey能区分出客户端即调用者身份,服务器端能根据secretKey判断出签名是否合法。
Android客户端签名认证的规则之一:
对各参数进行排序,拼接各参数和参数值,然后拼接密钥secretKey,最后进行MD5加密。生成一个参数sign。
实现代码
- 定义参数键值对象
public class NetParameter {private String key;private String value;public NetParameter(String key, String value) {super();this.key = key;this.value = value;}public String getKey() {return key;}public String getValue() {return value;}public void setKey(String key) {this.key = key;}public void setValue(String value) {this.value = value;}@Overridepublic String toString() {return "NetParameter [key=" + key + ", value=" + value + "]";}
}
- 签名方法
private String sign(List<NetParameter> list, String secretKey) {StringBuffer sb = new StringBuffer();if (list != null) {Collections.sort(list, new Comparator<NetParameter>() {@Overridepublic int compare(NetParameter lhs, NetParameter rhs) {return lhs.getKey().compareTo(rhs.getKey());}});for (int i = 0, size = list.size(); i < size; i++) {NetParameter p = list.get(i);if (p != null) {sb.append(p.getKey());sb.append("=");sb.append(p.getValue());}}}sb.append(secretKey);return digest(sb.toString(), "MD5");}
- 生成公开的Url
private String createUrl() {StringBuffer sb = new StringBuffer();sb.append(link);sb.append("?");if (list != null) {int j = -1;for (int i = 0, size = list.size(); i < size; i++) {NetParameter net = list.get(i);if (net != null) {String key = net.getKey();String value = net.getValue();if (key != null && value != null) {if (j < 0) {j = i;}if (j != i) {sb.append("&");}sb.append(key);sb.append("=");sb.append(value);}}}}sb.append("&");sb.append("sign");sb.append("=");sb.append(sign(list, getSecretKey()));String tmp = sb.toString();tmp = tmp.replace("?&", "?");return tmp;}
访问接口
当客户端生成的sign与服务器端验签的sign不一致时,访问不通过,将反馈相关的message:“无效的参数签名”。
http://192.168.1.76:8806/#/card?clientKey=05380b3c3323541917a25b001d394bf8&rand=751d7b3c-a37b-4d8f-b169-96ca2b30f286&machineNo=7700943733234077224&productName=P770&sign=FC6DE7DECCBDDB5D909D7AC0CA589BC3
对API接口或H5接口做签名认证相关推荐
- 开放平台设计之接口签名认证
目录 前言 签名认证 签名认证步骤: 下面以java代码举例: DEMO 前言 当前时代,数据是王 道!当我们自己的平台有了足够大的数据量,就有可能诞生一个开放平台供第三方分析.使用.那么我们怎么去实 ...
- API 面试四连杀:接口如何设计?安全如何保证?签名如何实现?防重如何实现?...
点击上方蓝色"方志朋",选择"设为星标"回复"666"获取独家整理的学习资料! 来源 | cnblogs.com/jurendage/p/1 ...
- API 夺命四连杀:接口如何设计?安全如何保证?签名如何实现?防重如何实现?...
点击上方蓝色字体,选择"标星公众号" 优质文章,第一时间送达 99套Java企业级实战项目 4000G架构师资料 作者:巨人大哥 来源 :cnblogs.com/jurendage ...
- Java API接口签名认证
Java API接口签名认证 我们在进行程序开发的时候,一定会开发一些API接口,供他人访问.当然这些接口中有可能是开放的,也有可能是需要登录才能访问的,也就是需要Token鉴权成功后才可以访问的.那 ...
- api接口文档中的签名是什么
文章目录 前言 一.api文档中的签名是什么? 二.对文档规则中的签名算法的认识 三.生成签名的函数 总结 前言 初入程序员行列,随着工作的不断展开,我对业务上的逻辑也逐渐熟悉.在开发过程中少不了看a ...
- Java—通过sign签名认证实现安全的开放接口API
关注微信公众号:CodingTechWork,一起学习进步. 文章目录 引言 API接口 timestamp保证唯一性 shell生成timestamp java生成timestamp模板 sign签 ...
- 好的股票程序化交易api接口模型该怎么做?
下面我们从几个方面来分享一下好的股票程序化交易api接口模型该怎么做? 1.用简单的哲理解决复杂的问题 我们都知道,时间是最珍贵的东西,它过去了就是过去了,不可能再回来了.所以我们今天的事情,不可以拖 ...
- Golang面向API编程-interface(接口)
Golang面向API编程-interface(接口) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. Golang并不是一种典型的面向对象编程(Object Oriented Pr ...
- python手机充值代码_不用框架,原生使用python做注册接口/登陆接口/充值接口的测试,做的数据/代码分离...
注意充值时候,cookie的处理方法,还是原来的三种方法 1.操作数据文件 do_exclel.py # -*- conding:utr-8 -*- #@Time :2018/11/8 22:46 ...
最新文章
- 职称计算机证是继续教育的内容吗,豆腐网教你一分钟弄懂继续教育学时认定表及上传注意事项~...
- geany怎么创建文件夹_教程详情|Geany怎么使用,Geany安装使用教程_234游戏网
- 极有收藏价值的一组难求纯4位数字.com域名 #8847#含义你懂的。 http://t.cn/ae9CTd
- 【C++】 C++标准模板库(二) Lists
- Js中 call() 与 apply() exports
- SAP Spartacus user role页面的checkbox设计明细介绍
- 删除链表的中间节点 Java实现_【链表问题】删除单链表的中间节点
- 编程语言排行分析,从2009到2019。
- SpringBoot WEB 核心原理
- “UNIX的名字是我起的”——对话UNIX开发者Brian W. Kernighan
- cmd批量修改文件名 增加文字_[Windows应用技巧][cmd篇][批量更改文件名]
- 射频前端行业信息汇总
- 代理、正向代理与反向代理
- Win系统 - 笔记本电脑之耳机插入没声音
- 进阶系列(11)—— C#多线程
- 常见下载方式之BT下载实现过程详解
- 7-1 电话聊天狂人
- mac下生成.icns图标
- 电商52个专业名词解释大汇总
- 虚拟主机mysql数据库大小,香港虚拟主机的网站数据库空间不够怎么办
热门文章
- 偷偷超了华为和小米,他才是真正的人生大赢家!
- 什么叫大数据人物画像_大数据下的用户画像全解析 | 都在说用户画像,你真的了解透了吗?...
- 任天堂Switch破解变身Linux平板电脑
- 4.1-WY33 计算糖果
- html tabcontrol模板,WPF TabControl模板+ ItemContainerStyle
- HDU-2732 Leapin' Lizards
- chatGPT成功之道-数据
- Xshell/vim颜色设置 修改hostname
- 带你轻松实现小程序自动化测试
- 小公司招聘程序员要求985研究生,网友:这点钱,专科都不去