

喜讯:国内、香港、海外云服务器租用特惠活动,2核/4G/10M仅需31元每月,点击抢购>>>
点击这里注册天翼云特邀VIP帐号,立即体验天翼云对象存储>>>
天翼云对象存储(经典版)I型API参考-用户签名验证(V4)使用查询参数验证
概述
用户可以使用查询字符串参数验证身份信息,此方法也称为预签名URL。预签名URL的用例场景是用户可以授予对OOS资源的临时访问权限。例如,用户可以在网站上包含预先签名的URL,或者在命令行客户端(例如Curl)中使用它来下载对象。
预签名URL支持GET、DELETE、PUT、HEAD、POST请求。
注意:使用预签名URL方式,有将您授权的数据在过期时间内曝露在互联网上的风险,建议您预先评估后使用。
以下是预签名URL的示例。
https://oos-cn.ctyunapi.cn/examplebucket/test.txt
?X-Amz-Algorithm=AWS4-HMAC-SHA256 &X-Amz-Credential=<your-access-key-id>/20180721/<oos-region>/s3/aws4_request
&X-Amz-Date=20180721T201207Z
&X-Amz-Expires=86400
&X-Amz-SignedHeaders=host
&X-Amz-Signature=<signature-value>
预签名URL方式需要注意:
预签名URL方式必须包含的字段:X-Amz-Date、X-Amz-Algorithm、X-Amz-Signature、X-Amz-SignedHeaders、X-Amz-Credential和X-Amz-Expires。字段的顺序可以互换,如果缺少其中一个,返回错误信息。
如果访问时间晚于请求中X- Amz-Expires时间或者设置的时间格式错误,返回错误信息。
如果在URL和Header中同时包含签名,以Header中的签名为准。
该X-Amz-CredentialURL中的值仅显示可读性“/”字符。在实践中,它应编码为%2F。例如:
&X-Amz-Credential=<your-access-key-id>%2F20180721%2F<oos-region>%2Fs3%2Faws4_request
下表介绍了URL中提供身份验证信息的查询参数。
查询字符串参数 | 描述 |
X-Amz-Algorithm | 确定OOS签名的版本以及用于计算签名的算法。取值为AWS4-HMAC-SHA256。 |
X-Amz-Credential | 用户的accessKeyId和范围信息,范围信息包括请求日期、区域、服务、终止字符串aws4_request,格式如下: <your-access-key-id>/<date>/<region>/<service>/aws4_request 其中: l date格式为YYYYMMDD。 l region: n 对于oos api:访问域名为oos-xx.ctyunapi.cn,region为xx。各资源池的详细访问域名详见 Endpoint列表; n 对于统计api:访问域名为oos-xx-mg.ctyunapi.cn,region为xx,各资源池的详细访问域名详见Endpoint列表; n 对于操作跟踪api:访问域名为oos-xx-cloudtrail.ctyunapi.cn,region为xx,各资源池的详细访问域名详见 Endpoint列表; n 对于iam api:访问域名为oos-xx-iam.ctyunapi.cn,region为xx,各资源池的详细访问域名详见 Endpoint列表; l service: n 若使用OOS API服务,service为s3; n 若使用统计分析服务,service为s3; n 若使用操作跟踪服务,service为cloudtrail; 若使用IAM服务,service为sts。 |
X-Amz-Date | 日期和时间格式必须遵循ISO 8601标准,并且必须使用“yyyyMMddTHHmmssZ”格式进行格式化。例如,如果日期和时间是“08/01/2018 15:32:41.982-700”,则必须首先将其转换为UTC(协调世界时),然后提交为“20180801T083241Z”。 |
X-Amz-Expires | 提供生成的预签名URL有效的时间段(以秒为单位)。例如,86400(24小时)。该值是整数。您可以设置的最小值为1,最大值为604800(七天)。 |
X-Amz-SignedHeaders | 列出用于计算签名的标头。签名计算中需要以下标头:
|
X-Amz-Signature | 提供签名以验证您的请求。此签名必须与OOS计算的签名相匹配;否则,OOS拒绝该请求。 |
签名过程
下图说明了签名计算过程。

下表描述了图中显示的功能。用户需要为这些功能实现代码。
功能 | 描述 |
Lowercase() | 将字符串转换为小写。 |
Hex() | 小写十六进制编码。 |
SHA256Hash() | 安全散列算法(SHA)加密散列函数。 |
HMAC-SHA256() | 使用提供的签名密钥的SHA256算法计算HMAC。这是最终的签名。 |
Trim() | 删除任何前导或尾随空格。 |
UriEncode() | URI编码每个字节。UriEncode()必须强制执行以下规则:
重要: 建议您编写自己的自定义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(); } |
使用参数的签名过程与使用请求头的签名过程类似,如下所示:
由于创建预签名URL的时候,并不知道有效负载的内容,所以设置常量UNSIGNED-PAYLOAD。
规范查询字符串(Canonical Query String)必须包括除了X-Amz-Signature之外的所有上述查询字符串。
推荐:TOP云智能建站优惠活动,仅880元即可搭建一个后台管理五端合一的智能网站(PC网站、手机网站、百度智能小程序、微信小程序、支付宝小程序),独享百度搜索SEO优势资源,让你的网站不仅有颜值有排面,更有排名,可以实实在在为您带来效益,请点击进入TOP云智能建站>>>,或咨询在线客服了解详情。


湘公网安备43019002001857号
备案号:
客服1