1. 计算请求签名
使用对象存储服务时,通过RESTful API对OSS发起HTTP请求,服务器端会对请求者信息进行验证。如果请求签名信息错误,请求将会被拒绝并返回错误信息。
1.1. 签名使用场景
在对资源发送访问请求时,通过ACL策略及API请求签名,对访问请求进行身份验证,并对请求操作进行权限和有效期进行控制。 签名的安全防护作用:
- 防止对传输数据进行篡改。对数据进行加密并进行校验,保障传输内容的一致性。
- 防止签名被盗用。请求签名与时间关联,防止签名被盗用和重复使用。
1.2. 生成签名
通过RESTful API发起的HTTP请求,签名信息通过HTTP Authorization头信息传递。生成Authorization头信息需要AccessKeyId、AccessKeySecret和SignedHeaders信息,这些信息经过规范化并加密后生成Signature。 AccessKeyId和AccessKeySecret信息可在控制台获取。
生成Authorization的过程如下:
- 获取头字符串。
- 将请求头字符串格式化为规范式。
- 使用SHA-1 hashing算法生成HMAC。
- 使用base-64将HMAC结果再次编码。
将请求头字符串格式化为规范格式过程如下:
- 获取所有请求头信息字段。
- 确保这些字段都是小写字母。
- 按照字母顺序将这些字段排序。
- 将多个实例中相同的字段名称合并到一个单个字段中,并在这个字段中使用逗号分隔这些值。
- 将字段的值中的空格和换行符替换为单个空格。
- 删除冒号前后的空格。
- 在每个字段后追加一个空行。
- 将所有字段合并到头字符串中。
1.3. 签名示例:
YCS1-HMAC-SHA1 Credential=5adb2538-9333-4024-b757-e095fc609a84, SignedHeaders=date;nonce;version, Signature=PftDtEe6nnh8ue5V7LoeYh3E6S4=
Name | Description |
---|---|
YCS1-HMAC-SHA1 | 签名算法,取值范围: YCS1-HMAC-SHA1 |
Credential | 签名密钥ID |
SignedHeaders | 生成签名的请求头信息字段,按字母顺序排序,多个用;隔开 |
Signature | 生成的签名信息 |
1.4. 示例:获取bucket下的对象列表
GET /bucket123?delimiter=%2F&maxKeys=5 HTTP /1.1 Host: cn-east-1.cloud-oss.com Date: Thu, 15 Nov 2018 03:21:17 GMT Version: 2018-10-30 Nonce: 612c5ff0-ac3a-406b-8715-4c56c4b5acf7 Authorization: YCS1-HMAC-SHA1 Credential=5adb2538-9333-4024-b757-e095fc609a84, SignedHeaders=date;nonce;version, Signature=PftDtEe6nnh8ue5V7LoeYh3E6S4= |