第三方调用时TimeStamp Nonce Signature 这三个参数有什么用?
在我们使用第三方提供的api的时候,对方通常会提供一个ak/sk或者 appid/token类似的东西才能调用他们提供的api,然后调用的时候就需要提供 nonce(随机字符串)、timestap(时间戳)、signature(签名)这些类似的参数(这三个参数多会以差不多的意思出现)。那么这三个参数分别有什么用呢?
- timestap(时间戳)
timestap的作用是:限制时间
服务端收到请求后第一时间就会判断这次请求是否超时,判断的原理很简单,就是使用当前的时间戳和发送过来的时间戳相减,如果超出了设置的超时时间就返回请求超时,没有就进行下一步。 - nonce(随机字符串)
nonce在调用api时的作用是 :防止重复提交
如何防止重复提交呢?服务端在用户每次使用api的时候都会将nonce缓存起来,比如使用redis缓存,用户调用一次之后将nonce缓存启动,再一次调用的时候会先去redis中查询是否存在,如果存在就返回重复提交,没有就进行下一步。 - signature(签名)
signature的作用是:电子签名(防止篡改)
不懂电子签名的同学可以先去了解一下,signature是如何生成的呢?
这要根据官方文档提供的摘要算法进行计算一般都是sha1(sort(token、timestamp、nonce))类似。
首先我们可以根据全面商家提供的ak/sk 或者 appid/token来对重要的数据进行加密,一般商家都会提供加解密工具和示例在官方文档,然后将:加密数据、token/sk、nonce、timestap这四个项按照规定的方式排序进行签名运算最终得到电子签名。服务端最终也会通过相同的方式进行运算生成signature然后进行对比,判断是否一致。
最后
通过这个这三个参数就能够判断这次请求的在一定时间内只能使用一次这样的功能。就算别人抓包拿到请求想要篡改内容 :修改timestap或者nonce 能躲过时间限制和单次请求校验,但最终都逃不过signature的校验。