参数签名认证

为了防止客户端访问的 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接口做签名认证相关推荐

  1. 开放平台设计之接口签名认证

    目录 前言 签名认证 签名认证步骤: 下面以java代码举例: DEMO 前言 当前时代,数据是王 道!当我们自己的平台有了足够大的数据量,就有可能诞生一个开放平台供第三方分析.使用.那么我们怎么去实 ...

  2. API 面试四连杀:接口如何设计?安全如何保证?签名如何实现?防重如何实现?...

    点击上方蓝色"方志朋",选择"设为星标"回复"666"获取独家整理的学习资料! 来源 | cnblogs.com/jurendage/p/1 ...

  3. API 夺命四连杀:接口如何设计?安全如何保证?签名如何实现?防重如何实现?...

    点击上方蓝色字体,选择"标星公众号" 优质文章,第一时间送达 99套Java企业级实战项目 4000G架构师资料 作者:巨人大哥 来源 :cnblogs.com/jurendage ...

  4. Java API接口签名认证

    Java API接口签名认证 我们在进行程序开发的时候,一定会开发一些API接口,供他人访问.当然这些接口中有可能是开放的,也有可能是需要登录才能访问的,也就是需要Token鉴权成功后才可以访问的.那 ...

  5. api接口文档中的签名是什么

    文章目录 前言 一.api文档中的签名是什么? 二.对文档规则中的签名算法的认识 三.生成签名的函数 总结 前言 初入程序员行列,随着工作的不断展开,我对业务上的逻辑也逐渐熟悉.在开发过程中少不了看a ...

  6. Java—通过sign签名认证实现安全的开放接口API

    关注微信公众号:CodingTechWork,一起学习进步. 文章目录 引言 API接口 timestamp保证唯一性 shell生成timestamp java生成timestamp模板 sign签 ...

  7. 好的股票程序化交易api接口模型该怎么做?

    下面我们从几个方面来分享一下好的股票程序化交易api接口模型该怎么做? 1.用简单的哲理解决复杂的问题 我们都知道,时间是最珍贵的东西,它过去了就是过去了,不可能再回来了.所以我们今天的事情,不可以拖 ...

  8. Golang面向API编程-interface(接口)

    Golang面向API编程-interface(接口) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. Golang并不是一种典型的面向对象编程(Object Oriented Pr ...

  9. python手机充值代码_不用框架,原生使用python做注册接口/登陆接口/充值接口的测试,做的数据/代码分离...

    注意充值时候,cookie的处理方法,还是原来的三种方法 1.操作数据文件  do_exclel.py # -*- conding:utr-8 -*- #@Time :2018/11/8 22:46 ...

最新文章

  1. 职称计算机证是继续教育的内容吗,豆腐网教你一分钟弄懂继续教育学时认定表及上传注意事项~...
  2. geany怎么创建文件夹_教程详情|Geany怎么使用,Geany安装使用教程_234游戏网
  3. 极有收藏价值的一组难求纯4位数字.com域名 #8847#含义你懂的。 http://t.cn/ae9CTd
  4. 【C++】 C++标准模板库(二) Lists
  5. Js中 call() 与 apply() exports
  6. SAP Spartacus user role页面的checkbox设计明细介绍
  7. 删除链表的中间节点 Java实现_【链表问题】删除单链表的中间节点
  8. 编程语言排行分析,从2009到2019。
  9. SpringBoot WEB 核心原理
  10. “UNIX的名字是我起的”——对话UNIX开发者Brian W. Kernighan
  11. cmd批量修改文件名 增加文字_[Windows应用技巧][cmd篇][批量更改文件名]
  12. 射频前端行业信息汇总
  13. 代理、正向代理与反向代理
  14. Win系统 - 笔记本电脑之耳机插入没声音
  15. 进阶系列(11)—— C#多线程
  16. 常见下载方式之BT下载实现过程详解
  17. 7-1 电话聊天狂人
  18. mac下生成.icns图标
  19. 电商52个专业名词解释大汇总
  20. 虚拟主机mysql数据库大小,香港虚拟主机的网站数据库空间不够怎么办

热门文章

  1. 偷偷超了华为和小米,他才是真正的人生大赢家!
  2. 什么叫大数据人物画像_大数据下的用户画像全解析 | 都在说用户画像,你真的了解透了吗?...
  3. 任天堂Switch破解变身Linux平板电脑
  4. 4.1-WY33 计算糖果
  5. html tabcontrol模板,WPF TabControl模板+ ItemContainerStyle
  6. HDU-2732 Leapin' Lizards
  7. chatGPT成功之道-数据
  8. Xshell/vim颜色设置 修改hostname
  9. 带你轻松实现小程序自动化测试
  10. 小公司招聘程序员要求985研究生,网友:这点钱,专科都不去