面试官:啥是请求重放呀? (下)

简介: 面试官:啥是请求重放呀? (下)

阿里的 API 网关,就是在 HEADER 里面加了两个参数:X-Ca-Timestamp、X-Ca-Nonce。

这个解决方案就是我们前面说的时间戳加随机串。

接着看看它的签名生成过程。

首先是客户端生成签名,三步:

  • 1.从原始请求中提取关键数据,得到一个用来签名的字符串
  • 2.使用加密算法加APP Secret对关键数据签名串进行加密处理,得到签名
  • 3.将签名所相关的所有头加入到原始HTTP请求中,得到最终HTTP请求

一图胜千言:


image.png

然后是服务端验证签名,四步:

  • 1.从接收到的请求中提取关键数据,得到一个用来签名的字符串
  • 2.从接收到的请求中读取APP Key,通过APP Key查询到对应的APP Secret
  • 3.使用加密算法和APP Secret对关键数据签名串进行加密处理,得到签名
  • 4.从接收到的请求中读取客户端签名,对比服务器端签名和客户端签名的一致性。


image.png

而具体的签名算法其实和微信支付,大同小异,主要也是对于参与签名的字段按照字典序排序。


个中差异就不进行对比说明了,有兴趣的朋友可以自己看一下。


最后说一句



好了,看到了这里点个赞吧,周更很累的,需要一点正反馈。

才疏学浅,难免会有纰漏,如果你发现了错误的地方,可以在留言区提出来,我对其加以修改。

感谢您的阅读,我坚持原创,十分欢迎并感谢您的关注。


目录
相关文章
|
存储 NoSQL 算法
面试官:啥是请求重放呀? (中)
面试官:啥是请求重放呀? (中)
496 0
面试官:啥是请求重放呀? (中)
|
安全 程序员 数据安全/隐私保护
面试官:啥是请求重放呀? (上)
面试官:啥是请求重放呀? (上)
228 0
面试官:啥是请求重放呀? (上)
|
2月前
|
存储 Java
【IO面试题 四】、介绍一下Java的序列化与反序列化
Java的序列化与反序列化允许对象通过实现Serializable接口转换成字节序列并存储或传输,之后可以通过ObjectInputStream和ObjectOutputStream的方法将这些字节序列恢复成对象。
|
14天前
|
算法 Java 数据中心
探讨面试常见问题雪花算法、时钟回拨问题,java中优雅的实现方式
【10月更文挑战第2天】在大数据量系统中,分布式ID生成是一个关键问题。为了保证在分布式环境下生成的ID唯一、有序且高效,业界提出了多种解决方案,其中雪花算法(Snowflake Algorithm)是一种广泛应用的分布式ID生成算法。本文将详细介绍雪花算法的原理、实现及其处理时钟回拨问题的方法,并提供Java代码示例。
35 2
|
18天前
|
JSON 安全 前端开发
第二次面试总结 - 宏汉科技 - Java后端开发
本文是作者对宏汉科技Java后端开发岗位的第二次面试总结,面试结果不理想,主要原因是Java基础知识掌握不牢固,文章详细列出了面试中被问到的技术问题及答案,包括字符串相关函数、抽象类与接口的区别、Java创建线程池的方式、回调函数、函数式接口、反射以及Java中的集合等。
21 0
|
2月前
|
Java C++
【Java基础面试十七】、Java为什么是单继承,为什么不能多继承?
这篇文章讨论了Java单继承的设计原因,指出Java不支持多继承主要是为了避免方法名冲突等混淆问题,尽管Java类不能直接继承多个父类,但可以通过接口和继承链实现类似多继承的效果。
【Java基础面试十七】、Java为什么是单继承,为什么不能多继承?
|
2月前
|
XML 存储 JSON
【IO面试题 六】、 除了Java自带的序列化之外,你还了解哪些序列化工具?
除了Java自带的序列化,常见的序列化工具还包括JSON(如jackson、gson、fastjson)、Protobuf、Thrift和Avro,各具特点,适用于不同的应用场景和性能需求。
|
2月前
|
Java
【Java基础面试三十七】、说一说Java的异常机制
这篇文章介绍了Java异常机制的三个主要方面:异常处理(使用try、catch、finally语句)、抛出异常(使用throw和throws关键字)、以及异常跟踪栈(异常传播和程序终止时的栈信息输出)。
|
2月前
|
Java
【Java基础面试三十八】、请介绍Java的异常接口
这篇文章介绍了Java的异常体系结构,主要讲述了Throwable作为异常的顶层父类,以及其子类Error和Exception的区别和处理方式。
|
2月前
|
Java
【Java基础面试十六】、Java中的多态是怎么实现的?
这篇文章解释了Java中多态的实现机制,主要是通过继承,允许将子类实例赋给父类引用,并在运行时表现出子类的行为特征,实现这一过程通常涉及普通类、抽象类或接口的使用。