除了授权头以外,用户可以通过URL中加入查询参数来表达签名信息的方式,将该URL转给第三方实现授权访问,也称为预签名URL。这对于使用第三方浏览器获取对象存储数据的用户非常有用,不需要代理请求。这种方式通过构造并加密一个终端用户浏览器可以检索到的预签名的请求来实现,同时设置过期时间来标明预签名的有效期。
预签名URL支持GET请求和POST请求(POST Object除外)。
注意使用预签名URL方式,有将您授权的数据在过期时间内曝露在互联网上的风险,建议您预先评估后使用。
URL中包含签名的示例如下:
http://oos-cn.ctyunapi.cn/quotes/n-*elson?AWSAccessKeyId=44CF9590006BF252F707&Expires=1141889120&Signature=vjbyPxybdZaNmGa%2ByT272YEAiv4%3D
注意在URL中实现签名,必须至少包含Signature,Expires,AWSAccessKeyId三个参数。
请求参数
参数 | 描述 | 是否必须 |
---|---|---|
AWSAccessKeyId | 用户的AccessKeyID信息,可以登录到可以登录到对象存储(经典版)I型控制中心,点击“访问控制”>“安全凭证”>“密钥”查看;或者调用ListAccessKey查看。 类型:字符串。 |
是 |
Expires | 签名过期时间,按照秒来计算的。服务器端超过这个时间的请求将被拒绝。 类型:字符串。 |
是 |
Signature | URL是按照HMAC-SHA1的StringToSign的Base64编码方式编码。 类型:字符串。 |
是 |
Expires是一个UNIX时间(自UTC时间1970年1月1号开始的秒数),用于标识该URL的超时时间。如果OOS接收到这个URL请求的时候晚于签名中包含的Expires参数时,则返回请求超时的错误码。例如:当前时间是1141889060,开发者希望创建一个60秒后自动失效的URL,则可以设置Expires时间为1141889120。
URL中包含签名的算法和Header中包含签名的算法基本一样,主要区别如下:
- 通过URL包含签名时,之前的Date参数换成Expires参数。
- 如果在URL和Header中同时包含签名,以Header中的签名为准。
- 对于URL预签名,如果传入的Signature,Expires,AWSAccessKeyId出现不止一次,以第一次为准。
- 对于URL预签名,请求先验证请求时间是否晚于Expires时间:
- 如果请求时间晚于Expires时间,则返回错误响应码。
- 如果请求时间不晚于Expires时间,则验证签名。