脚本宝典收集整理的这篇文章主要介绍了PHP生成腾讯云COS接口需要的请求签名,脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
COS 是腾讯云对象存储的缩写及简称,请求签名是第三方在调用COS相关接口时需要按需提供的、经过特定算法创建而成的一组字符串信息,将唯一的标识当前第三方身份,提供通信双方的身份识别,只有有效的签名COS才会提供服务
使用 PHP 创建 COS 接口所需要的请求签名,与官方文档给出的示例做比较,验证算法的正确性
先来看一条官方文档给出的请求签名的样子
请求签名特点总结
请求签名一共需要7个值,下面一一讲解,各个击破
签名算法,官方目前仅支持 sha1,因此直接给值即可
当前签名的有效起止时间,UNIX时间戳格式,英文半角分号;分割,格式如1480932292;1481012298
个人理解,由HTTP请求头组成,取全部或部分请求头,将key:value形式的请求项的 key 部分取出,转化小写,多个 key 按字典排序,以字符;连接,最终组成字符串
如原始请求头有两个:
key 就是 Host 和 Content-TyPE,经过运算后输出content-type;host
个人理解,由HTTP请求参数组成,取全部或部分请求参数,将key=value形式的请求参数的 key 部分取出,转化小写,多个 key 按字典排序,以字符;连接,最终组成字符串
如原始HTTP请求为:
key 就是 PRefix 和 max-keys,经过运算后输出max-keys;prefix,如果请求没有参数比如 put、post,此处即为空
根据HTTP内容计算签名,算法由COS提供,只需按要求给值
在开始编写逻辑之前,先看一下官方示例给出的参考值,以及经过计算后的结果,以便和自己开发的逻辑进行结果比对
HTTP原始请求,也可以理解为计算签名前或不需要签名时的HTTP请求:
计算签名后应该得到的HTTP请求:
结论:算法如果能得到 Authorization 后的那一串字符串即为正确
来看一下(官方提供的)用户信息以及HTTP信息:
将准备工作中的各项参数带入请求签名规则,不难就可以得到结果,如下表:
但 q-signature 怎么来的?
刚才说到,q-signature 也需要特定算法计算得来,下面就说明如何计算
先看代码:
brush:PHP;"> /** * 计算签名 * secretId、secretKey 为必需参数,qSignStart、qSignEnd为调试需要,测试通过后应取消,改为方法内自动创建 */ function get_authorization( $secretId,$secretKey,$qSignStart,$qSignEnd,$fileUri,$headers ){ /* * 计算COS签名 * 2018-05-17 * author:cinlap* ref:https://cloud.tencent.COM/document/product/436/7778 */ $qSignTime = "$qSignStart;$qSignEnd"; //unix_timestamp;unix_timestamp
$qKeyTime = $qSignTime;$header_list = get_q_header_list($headers);
//如果 Uri 中带有 ?的请求参数,该处应为数组排序后的字符串组合
$url_param_list = '';//compute signature
$httpMethod = 'put';
$httpUri = $fileUri;//与 q-url-param-list 相同
$httpParameters = $url_param_list;//将自定义请求头分解为 & 连接的字符串
$headerString = get_http_header_string( $headers );// 计算签名中的 signature 部分
$signTime = $qSignTime;
$signKey = hash_hmac('sha1',$signTime,$secretKey);
$httpString = "$httpMethod\n$httpUri\n$httpParameters\n$headerString\n";
$sha1edHttpString = sha1($httpString);
$stringToSign = "sha1\n$signTime\n$sha1edHttpString\n";
$signature = hash_hmac('sha1',$stringToSign,$signKey);
//组合结果
$authorization = "q-sign-algorithm=sha1&q-ak=$secretId&q-sign-time=$qSignTime&q-key-time=$qKeyTime&q-header-list=$header_list&q-url-param-list=$url_param_list&q-signature=$signature";
return $authorization;
}
以上是脚本宝典为你收集整理的PHP生成腾讯云COS接口需要的请求签名全部内容,希望文章能够帮你解决PHP生成腾讯云COS接口需要的请求签名所遇到的问题。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。