上云无忧 > 文档中心 > 天翼云对象存储(OOS经典版)I型用户签名验证(V4)使用查询参数验证签名过程
对象存储
天翼云对象存储(OOS经典版)I型用户签名验证(V4)使用查询参数验证签名过程

文档简介:
下图说明了签名计算过程。 下表描述了图中显示的功能。用户需要为这些功能实现代码。 功能 描述 Lowercase() 将字符串转换为小写。 Hex() 小写十六进制编码。
*产品来源:中国电信天翼云。免费试用 咨询热线:400-826-7010,为您提供专业的售前咨询,让您快速了解云产品,助您轻松上云! 微信咨询
  免费试用、价格特惠

签名过程


下图说明了签名计算过程。

下表描述了图中显示的功能。用户需要为这些功能实现代码。

功能

描述

Lowercase()

将字符串转换为小写。

Hex()

小写十六进制编码。

SHA256Hash()

安全散列算法(SHA)加密散列函数。

HMAC-SHA256()

使用提供的签名密钥的SHA256算法计算HMAC。这是最后的签名。

Trim()

删除任何前导或尾随空格。

UriEncode()

URI编码每个字节。UriEncode()必须强制执行以下规则:

l URI编码除了下面字符之外的每个字节:'A' - 'Z','a' - 'z','0' - '9',' - ','.','_'和'〜'。

l 空格字符是保留字符,必须编码为“%20”(而不是“+”)。

l 每个URI编码字节由'%'和两位十六进制值组成。

l 十六进制值中的字母必须为大写,例如“%1A”。

l 除了对象名之外,对正斜杠字符'/'进行编码。例如,如果对象名称为 photos/Jan/sample.jpg,则不对键名称中的正斜杠进行编码。

我们建议您编写自己的自定义UriEncode函数,以确保您的编码可以正常工作。

以下是Java中的示例UriEncode()函数。

public static String   UriEncode(CharSequence input, boolean encodeSlash) {

          StringBuilder result = new   StringBuilder();

          for (int i = 0; i < input.length(); i++) {

              char ch = input.charAt(i);

              if ((ch >= 'A' && ch   <= 'Z') || (ch >= 'a' && ch <= 'z') || (ch >= '0'   && ch <= '9') || ch == '_' || ch == '-' || ch == '~' || ch == '.') {

                  result.append(ch);

              } else if (ch == '/') {

                  result.append(encodeSlash ?   "%2F" : ch);

              } else {

                    result.append(toHexUTF8(ch));

              }

          }

          return result.toString();

      }

使用参数的签名过程与使用请求头的签名过程类似,如下所示:

1、由于创建预签名URL的时候,并不知道有效负载的内容,所以设置常量UNSIGNED-PAYLOAD。
2、规范查询字符串(Canonical Query String)必须包括除了X-Amz-Signature之外的所有上述查询字符串。
3、规范标头必须包括HTTP Host标头。如果用户想包含x-amz-*请求头,这些标头都将参与签名计算。用户可以选择其他的请求头是否参与签名计算。安全起见,让尽可能多的请求头参与签名计算。
相似文档
官方微信
联系客服
400-826-7010
7x24小时客服热线
分享
  • QQ好友
  • QQ空间
  • 微信
  • 微博
返回顶部