Credentials.prototype.sign = function(data) {
var digest = util.hmacSha1(data, this.secretKey);
var sageDigest = util.base64ToUrlSafe(digest);
return this.accessKey + ":" + sageDigest;
}
这是七牛 node 中对请求参数生成 token 的方法,使用的是 hmacsha1 非对称混淆,但是这个 token 传到七牛后台的话,七牛是如何从 token 中获取参数的呢?又如何进行 token 校验的呢?
1
kslr 2017-10-18 19:56:00 +08:00 via Android 1
除了 token 还有参数吧,把参数生成 token 对比不就可以了
|
3
lcorange 2017-10-18 22:50:45 +08:00 1
我看了下官方的 api 文档,不知道是不是你用的,其中 token 最后生成是三个变量拼一起,如下
uploadToken = AccessKey + ':' + encodedSign + ':' + encodedPutPolicy 其中 encodedSign = urlsafe_base64_encode(sign) ,这个函数中,sign 由如下函数生成 sign = hmac_sha1(encodedPutPolicy, "<SecretKey>") 也就是说 encodedSign = urlsafe_base64_encode(hmac_sha1(encodedPutPolicy, "<SecretKey>")) 在这里 encodedPutPolicy 作为 token 的第三部分传了过去,SecretKey 显然七牛官方也是知道的。所以完全可以重新执行一遍加密流程,来校验是否正确 参照官网文档如下 上传文件 api https://developer.qiniu.com/kodo/api/1312/upload token 构造策略 https://developer.qiniu.com/kodo/manual/1208/upload-token |