加入收藏 | 设为首页 | 会员中心 | 我要投稿 云计算网_宿迁站长网 (https://www.0527zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

PHP生成腾讯云COS接口 需要的请求签名

发布时间:2023-02-09 12:49:36 所属栏目:PHP教程 来源:
导读:  但 q-signature 怎么来的?

  刚才说到,q-signature 也需要特定算法计算得来,下面就说明如何计算

  计算请求签名
  先看代码:

  * ref:https://cloud.tencent.com/document/product/436
  但 q-signature 怎么来的?
 
  刚才说到,q-signature 也需要特定算法计算得来,下面就说明如何计算
 
  计算请求签名
  先看代码:
 
  * 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 );
 
  【免责声明】本站内容转载自互联网,其相关言论仅代表作者个人观点绝非权威,不代表本站立场。如您发现内容存在版权问题,请提交相关链接至邮箱:bqsm@foxmail.com,我们将及时予以处理。
 
  COS和请求签名是什么
  COS 是腾讯云对象存储的缩写及简称,请求签名是第三方在调用COS相关接口时需要按需提供的、经过特定算法创建而成的一组字符串信息,将唯一的标识当前第三方身份,提供通信双方的身份识别,只有有效的签名COS才会提供服务
 
  目标
  使用 PHP 创建 COS 接口所需要的请求签名,与官方文档给出的示例做比较,验证算法的正确性
 
  认识请求签名
  先来看一条官方文档给出的请求签名的样子
 
  q-sign-algorithm=sha1&q-ak=[SecretID]&q-sign-time=[SignTime]&q-key-time=[KeyTime]&q-header-list=[SignedHeaderList]&q-url-param-list=[SignedParameterList]&q-signature=[Signature]
 
  请求签名特点总结
 
  是一串字符串
  key=value的键值对格式,key为固定值
  一共有7对key=value
  sha1也是参数,但截止到官方发文只支持sha1,因此可以直接赋值
  SignedHeaderList、SignedParameterList、Signature三个value需要通过算法生成
  键值对的具体描述参见。
 
  请求签名一共需要7个值,下面一一讲解,各个击破
 
  签名算法,官方目前仅支持 sha1,因此直接给值即可
 
  账户ID,即用户的 SecretId,可以在控制台页面获取
 
  当前签名的有效起止时间,Unix时间戳格式,英文半角分号;分割,格式如1480932292;1481012298
 
  与 q-sign-time 值相同
 
  个人理解,由HTTP请求头组成,取全部或部分请求头,将key:value形式的请求项的 key 部分取出,转化小写,多个 key 按字典排序,以字符;连接,最终组成字符串
 
  如原始请求头有两个:
 
  Host:bucket1-1254000000.cos.ap-beijing.myqcloud.com Content-Type:image/jpeg
 
  key 就是 Host 和 Content-Type,经过运算后输出content-type;host
 
  个人理解,由HTTP请求参数组成,取全部或部分请求参数,将key=value形式的请求参数的 key 部分取出,转化小写,多个 key 按字典排序,以字符;连接,最终组成字符串
 
  如原始HTTP请求为:
 
  GET /?prefix=abc&max-keys=20
 
  key 就是 prefix 和 max-keys,经过运算后输出max-keys;prefix,如果请求没有参数比如 put、post,此处即为空
 
  根据HTTP内容计算签名,算法由COS提供,只需按要求给值
 
  在开始编写逻辑之前,先看一下官方示例给出的参考值,以及经过计算后的结果,以便和自己开发的逻辑进行结果比对
 
  HTTP原始请求,也可以理解为计算签名前或不需要签名时的HTTP请求:
 
  PUT /testfile2 HTTP/1.1 Host: bucket1-1254000000.cos.ap-beijing.myqcloud.com x-cos-content-sha1: 7b502c3a1f48c8609ae212cdfb639dee39673f5e x-cos-storage-class: standard
 
  Hello world
 
  计算签名后应该得到的HTTP请求:
 
  PUT /testfile2 HTTP/1.1 Host: bucket1-1254000000.cos.ap-beijing.myqcloud.com x-cos-content-sha1: 7b502c3a1f48c8609ae212cdfb639dee39673f5e x-cos-storage-class: standard Authorization: q-sign-algorithm=sha1&q-ak=AKIDQjz3ltompVjBni5LitkWHFlFpwkn9U5q&> q-sign-time=1417773892;1417853898&q-key-time=1417773892;1417853898&q-header-list=host;x-cos-content-sha1;x-cos-storage-class&q-url-param-list=&q-signature=14e6ebd7955b0c6da532151bf97045e2c5a64e10
 
  Hello world
 
  结论:算法如果能得到 Authorization 后的那一串字符串即为正确
 
  来看一下(官方提供的)用户信息以及HTTP信息:
 
  SecretId:AKIDQjz3ltompVjBni5LitkWHFlFpwkn9U5q
  SecretKey:BQYIM75p8x0iWVFSIgqEKwFprpRSVHlz
  签名有效起始时间:1417773892
  签名有效停止时间:1417853898
  HTTP原始请求头:根据上一节示例不难得到HTTP原始请求有三项内容 Host、x-cos-content-sha1 和 x-cos-storage-class
  HTTP请求参数:是 PUT 请求,没有 ? 参数
 

(编辑:云计算网_宿迁站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!