4.7. Swift 临时 URL 操作

要允许临时访问,temp url 功能由 radosgw 的 swift 端点支持。例如,GET 请求到对象,无需共享凭据。

对于此功能,首先应设置 X-Account-Meta-Temp-URL-Key 和 optionally X-Account-Meta-Temp-URL-URL-Key-2 的值。Temp URL 功能依赖于针对这些 secret 密钥的 HMAC-SHA1 签名。

4.7.1. Swift 获取临时 URL 对象

临时 URL 使用加密 HMAC-SHA1 签名,其中包含以下元素:

  • Request 方法的值,实例"GET"
  • 到期时间,采用自 epoch起的秒数,即 Unix 时间
  • 从 "v1" 开始的请求路径

以上项目在它们之间附加了换行符,并使用 SHA-1 哈希算法(之前发布的 Temp URL 键)生成 HMAC。

要演示上述的 python 脚本的示例如下:

示例

import hmac
from hashlib import sha1
from time import time

method = 'GET'
host = 'https://objectstore.example.com'
duration_in_seconds = 300  # Duration for which the url is valid
expires = int(time() + duration_in_seconds)
path = '/v1/your-bucket/your-object'
key = 'secret'
hmac_body = '%s\n%s\n%s' % (method, expires, path)
hmac_body = hmac.new(key, hmac_body, sha1).hexdigest()
sig = hmac.new(key, hmac_body, sha1).hexdigest()
rest_uri = "{host}{path}?temp_url_sig={sig}&temp_url_expires={expires}".format(
     host=host, path=path, sig=sig, expires=expires)
print rest_uri

输出示例

https://objectstore.example.com/v1/your-bucket/your-object?temp_url_sig=ff4657876227fc6025f04fcf1e82818266d022c6&temp_url_expires=1423200992

4.7.2. Swift POST 临时 URL 密钥

使用所需密钥向 swift 帐户发出 POST 请求,将为帐户提供临时 URL 访问的帐户的 secret 临时 URL 密钥。支持两个密钥,并且会针对密钥检查签名(如果存在),因此这些密钥可以被轮转,而不会无效的临时 URL。

语法

POST /API_VERSION/ACCOUNT HTTP/1.1
Host: FULLY_QUALIFIED_DOMAIN_NAME
X-Auth-Token: AUTH_TOKEN

请求 Headers

X-Account-Meta-Temp-URL-Key
描述
使用任意字符串值的用户定义的键。
Type
字符串
必需
X-Account-Meta-Temp-URL-Key-2
描述
使用任意字符串值的用户定义的键。
Type
字符串
必需