请教一下,七牛关于 token 解密的问题

2017-10-18 18:56:37 +08:00
 vainly
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 校验的呢?

2459 次点击
所在节点    问与答
4 条回复
kslr
2017-10-18 19:56:00 +08:00
除了 token 还有参数吧,把参数生成 token 对比不就可以了
vainly
2017-10-18 22:25:32 +08:00
@kslr 但是 token 中有 now time,每次生成的时候 token 都会不一样,到服务怎么对比呢?
lcorange
2017-10-18 22:50:45 +08:00
我看了下官方的 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
vainly
2017-10-19 10:04:02 +08:00
@lcorange 谢谢仁兄,我看的是七牛推流的 sdk,最后生成地址的时候没注意把参数也携带在 rtmp url 后面,是可以重新之心加密流程的。谢谢你。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/398732

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX