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
- 字符串
- 必需
- 否