API 签名简谈

本贴最后更新于 2674 天前,其中的信息可能已经渤澥桑田

方式

Client 端使用 Server 提供的 App Secret 以及指定的方法进行签名,生成 signature 签名字符串,Server 收到请求先进行验签,确认请求完整。反之亦然。

服务器维护客户端列表

服务器端需要一个客户端、App Key、App Secret 的对应关系。

假使我们有以下客户端:

ClientApp KeyApp Secret
官方客户端00013F2504E0-4F89-11D3-9A0C-0305E82C3301

服务端提供 App Key 与 App Secret 给用户客户端程序。

假设使用参数名称以及当前时间的时间戳 timestamp (可以规定,服务器与客户端的时间差需要小于 10 分钟)先按字典序进行排列;然后再拼上 App Secret 进行 md5 signature 后,把 appkeysignature 附加在字段后传输。

客户端发送请求

某请求有三个参数

参数名
abtest
aa1234
zzhaha
  1. request params 的字典序为(包含当时时间戳): aa=1234&ab=test&timestamp=1488857536&zz=haha
  2. 拼接上 App Secret 后为 aa=1234&ab=test&timestamp=1488857536&zz=haha3F2504E0-4F89-11D3-9A0C-0305E82C3301 ; 对该字符串进行 md5 散列哈希后为 C194D39F31D115B7F115631237E9CD5E
  3. 因此最终的请求 request params 为:aa=1234&ab=test&timestamp=1488857536&zz=haha&appkey=0001&signature=C194D39F31D115B7F115631237E9CD5E

服务器验签

先对接收到的参数进行拆解,分成四个部分

  • 原请求再进行字典序 aa=1234&ab=test&timestamp=1488857536&zz=haha
  • App Key 0001
  • signature C194D39F31D115B7F115631237E9CD5E
  • timestamp 1488857536

然后进行验签

  1. 判断时间是否过期
  2. 利用 App Key 查表得出 App Secret;把原请求进行相同的算法,把得到的 md5 哈希字符串与收到的 signature 字段串进行比较

反向

服务器返回给客户端的数据,可以进行同样的方式进行签名与验签。

  • Java

    Java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由 Sun Microsystems 公司于 1995 年 5 月推出的。Java 技术具有卓越的通用性、高效性、平台移植性和安全性。

    3190 引用 • 8214 回帖 • 1 关注
  • API

    应用程序编程接口(Application Programming Interface)是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力,而又无需访问源码,或理解内部工作机制的细节。

    77 引用 • 430 回帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...