请求签名

最近更新时间:2020-07-27 10:13:45

当用户请求日志服务时,可以使用AccessKey和SecretKey对请求做签名,当日志服务收到带签名信息的请求之后,将使用相同的算法验证签名,如果发现签名不一致,返回给用户403。如果验证签名一致,且AccessKey对应的用户有权限操作请求的资源,则请求成功,否则返回给用户403。 如果用户请求日志服务时,在请求中没有携带签名信息,那么日志服务认为该请求是匿名的,如果用户请求的资源不允许匿名请求,日志服务返回403给用户。

签名算法

Authorization = “KLOG YourAccessKey:Signature” 
Signature = Base64(HMAC-SHA1(YourSecretKey, UTF-8-Encoding-Of( StringToSign ) ) );
StringToSign = HTTP-Verb + "\n" +
Content-MD5 + "\n" +
Content-Type + "\n" +
Date + "\n" +
CanonicalizedKLogHeaders + "\n" +
CanonicalizedResource;


签名中字符串含义具体如下:

名称 说明 示例
HTTP-Verb HTTP 请求的方法名称 PUT、GET、POST 等
Content-MD5 HTTP 请求中 Body 部分的 MD5 值,必须大写字母 875264590688CA6171F6228AF5BBB3D2
Content-Type HTTP 请求中 Body 部分的类型 application/x-protobuf
Date 表示此次操作的时间,且必须为 HTTP1.1 中支持的 GMT 格式,取HTTP Header中的Date,如果该时间与KS3服务端时间相差15分钟以外,将导致服务端返回403 Wed, 17 Feb 2012 15:31:56 GMT
CanonicalizedKLogHeaders 由 HTTP 请求中以 x-klog 为前缀的自定义header构造的字符串 x-klog-api-version:0.1.0\n:50\nx-klog-compress-type:lz4\nx-klog-signature-method:hmac-sha1
CanonicalizedResource 由 HTTP 请求资源构造的字符串 /PutLogs
  • CanonicalizedLOGHeaders 的构造方式如下: 将所有以 x-klog 为前缀的 HTTP 请求头的名字转换成小写字母。 将上一步得到的所有 KLOG 自定义请求头按照字典顺序进行升序排序。 删除请求头和内容之间分隔符两端出现的任何空格。 将所有的头和内容用 \n 分隔符组合成最后的 CanonicalizedKLogHeader。
  • CanonicalizedResource 的构造方式如下: 将 CanonicalizedResource 设置为空字符串""。 放入要访问的 LOG 资源,如 /PutLogs 如果请求包含查询字符串QUERY_STRING,则在 CanonicalizedResource 字符串尾部添加 ? 和查询字符串。

金山云,开启您的云计算之旅

免费注册