我是真的服了腾讯了,机器人开的企业吗。

最近我在迁移博客的图床,不想用B站了防止给我卷图跑路。于是我研究腾讯云对象存储加签名保护。
他们不是有个在线签名工具吗:https://cos.cloud.tencent.com/tools/cos?tab=sign

但是,重点来了
它不是有个HttpParameters(选填)吗,这个验证允许你加额外参数进签名里,可以用来身份标识之类的。但它是不会给你重排的。也就是你传进去什么样,它签出来就是什么样。
比如你填 renji=hacker&chibang=dabing 是吧。r开头的在前,c开头的在后。它生成签名就根本不按字典序排,而是按照你手动输入的顺序。

坑点就在于,这个和 chibang=dabing&renji=hacker 按字典序排的参数拿到的签名结果是不一样的。
在COS鉴权侧,它又会强制按字典序排参数来验签。那这又会发生什么呢?你拿非字典序参数出来的签名,去请求对象存储,然后人家对象存储又强制按字典序验签。就会出现你签名即使是正确的,但是参数列表没按字典序排,验证出来也是错的。
我靠,腾讯没点大病是真做不出来这个,左右脑互搏了。害的我因为这个卡几小时排不出来问题。

所以我提醒一下各位,HttpParameters的参数名一定要按字典序排,要不然就会出现生成出来签名即使是正确的也过不了验证的情况。。。。
这是日志:

1
2
3
4
5
6
7
8
9
10
This XML file does not appear to have any style information associated with it. The document tree is shown below.
<Error>
<Code>SignatureDoesNotMatch</Code>
<Message>The Signature you specified is invalid.</Message>
<StringToSign>sha1 1782919296;1782922896 8fca24aeaa82174638d101081b3c7b697635711a </StringToSign>
<FormatString>get /renji.txt chibang=dabing&renji=hacker </FormatString>
<Resource>/renji.txt</Resource>
<RequestId>NmE0NTMwYTFfODdkNGZlMDlfMjczYTBfMTExNWMyNjk=</RequestId>
<TraceId>OGVmYzZiMmQzYjA2OWNhODk0NTRkMTBiOWVmMDAxODc0OWRkZjk0ZDM1NmI1M2E2MTRlY2MzZDhmNmI5MWI1OTQyYWVlY2QwZTk2MDVmZDQ3MmI2Y2I4ZmI5ZmM4ODFjNWUzMTJiNDQ5MjAyZTI4YmY3YzA0ODBkODE4ZjJmYmU=</TraceId>
</Error>