本来不想说,可实再忍不住,作为一个中国顶尖的公司,搞个云平台技术很牛,就是文档真是狗粪。

位置:腾讯云文档平台 API文档 云服务器 API 云服务器API(旧版) 调用方式 签名方法

https://cloud.tencent.com/document/api/213/6984

位置:腾讯云文档平台 API文档 云服务器 API 调用方式 接口鉴权

https://cloud.tencent.com/document/api/213/11652

新老文档上写的【生成的签名串并不能直接作为请求参数,需要对其进行 URL 编码。】

老子写了一下午,全是身份证验证失败,结果用到你们api2.0的调试工具一下,你们并没有进行URL编码,结果老子把编码去掉就可以了,你说你们是不是害人,什么TM的水平,误人子弟,好好的做一个简简单单的接口不行嘛,非要尼玛把参数搞过来搞过去,有病啊,显得你们有多NB,老子就你们不设计signature又能怎么的了??还非要搞顺序排列,还要加密,是不是有病!不加密又怎么了,不按顺序排又能怎么的了,操蛋的设计。

用户1123396用户1123396提问于
zqfan回答于

签名是为了对请求的真实有效性进行认证,确保该请求确实是该用户发出来的,签名的时候要用到的secretkey其实就相当于密码,如果不签名,任何人都可以伪造请求,用您账户中的钱做任何事情。签名通常要求全文签名,保证所有信息的有效性。

signature为什么要url编码?这是因为签名中可能会出现特殊字符,而这些特殊字符会导致服务器端解析参数的时候出错,例如+这个特殊符号。具体的,您可以参考关于http请求进行url编码的普适性文章,例如这篇博客:https://www.cnblogs.com/jerrysion/p/5522673.html

目前腾讯云API是要求必须对参数进行编码的,signature也不例外。

如其他用户回答的,这里的url编码指的是urlencode,而不是base64编码,注意区别

除了您遇到的这个要对signature进行urlencode的问题,还有其他要考虑的特殊情况,您可以参考下这里的代码具体实现:https://github.com/QcloudApi/qcloudapi-sdk-python/blob/master/QcloudApi/common/sign.py ,我们也鼓励用户采用sdk,或者至少复用sdk中的签名代码。

为什么要排序?如果不要求排序,那么就必须要求Signature只能出现在特定的位置,例如url末尾,服务器端接收到请求后,直接截取signature之前的字符串进行校验。这里只是对两种情况选择了其中一种而已,而我们认为保证签名参数的有序性是更具普适性的。有些编程语言(例如go)的http请求里(特别是post),其实不需要用户自己拼接成url的,而语言对参数的顺序又无法保证(即使有序,但是如果有个参数是XYZ=foo,则Signature的位置是无法保证在末尾的),用户在这种情况下无法控制或者不应该干涉http请求底层的行为,但是对如何签名是完全可以控制的而且是必须自行生成的,这个时候选择排序签名反而减少了麻烦,您只需要在编程语言里一个sort就解决了问题。

另外,API 2.0调试工具也是会对签名进行urlencode的,例如:

回答过的其他问题

 如何使用人工智能合成人声?

智能语音服务昨天刚上线了语音合成的功能,可以了解一下:https://cloud.tencent.com/document/api/441/18086

就不能给个脚本吗!!!!!!!!!!!!!?

机器翻译目前支持API3.0,提供了6个语言的SDK,包含pyhton,java,php,go,nodejs,.net:https://github.com/TencentCloud/?utf8=%E2%9C%93&q=tencentcloud-sdk&type=&languag...... 展开详请

ssl api 参数问题是否未统一?

已采纳
大小写的是API3.0的风格,ssl这个产品并未支持API3.0,所以你看到文档中参数仍然是小写开头的。注意,不需要全部小写,例如searchKey,K需要按照文档中那样大写。建议先参考文档中的示例调用下试试。 鉴权失败一般是您的签名算法没有完全按照鉴权文档中的要求实现造成的,可...... 展开详请

vpc api鉴权post方式是怎么拼接的?

post方式和GET是一样的,参照文档 https://cloud.tencent.com/document/api/215/15759 但是目前post只支持 content-type: application/x-www-form-urlencoded : https://c...... 展开详请

Go SDk在哪里?

暂时没有。

只有一个未完成的版本,两年没更新了:https://github.com/tencentyun/cos-sdk-go

中文URL不提前进行编码的话,刷新CDN缓存无效,编码以后,签名校验失败,怎么破?

签名的字符串不需要进行urlencode,但是需要进行UTF8编码。签名之后发送请求的时候需要UTF8编码,并且进行urlencode

扫码关注云+社区