用户签名验证
OBS通过AK/SK对请求进行签名,在向OBS发送请求时,客户端发送的每个消息头需要包含由SK、请求时间、请求类型等信息生成的签名信息。
- AK(Access Key ID):访问密钥ID。与私有访问密钥关联的唯一标识符;访问密钥ID和私有访问密钥一起使用,对请求进行加密签名。
 - SK(Secret Access Key):与访问密钥ID结合使用的密钥,对请求进行加密签名,可标识发送方,并防止请求被修改。
 
用户可以在IAM服务中获取AK和SK,获取的方法请参见获取访问密钥(AK/SK)。
OBS根据应用场景,提供了Header中携带签名、URL中携带签名和基于浏览器上传的表单中携带签名3种签名计算方式。
以Header中携带签名为例,用户签名验证流程如表1所示。Header中携带签名方法的具体参数说明及代码示例,请参见Header中携带签名。
| 
       步骤  | 
     
       示例  | 
    |
|---|---|---|
| 
       签名计算  | 
     
       1. 构造HTTP消息  | 
     
       PUT /object HTTP/1.1 Host: bucket.obs.region.example.com Date: Tue, 04 Jun 2019 06:54:59 GMT Content-Type: text/plain Content-Length: 5913  | 
    
| 
       2. 按照签名规则计算StringToSign  | 
     
       StringToSign = HTTP-Verb + "\n" + Content-MD5 + "\n" + Content-Type + "\n" + Date + "\n" + CanonicalizedHeaders + CanonicalizedResource  | 
    |
| 
       3. 准备AK和SK  | 
     
       AK: ****** SK: ******  | 
    |
| 
       4. 计算签名Signature  | 
     
       Signature = Base64( HMAC-SHA1( SecretAccessKeyID, UTF-8-Encoding-Of( StringToSign ) ) )  | 
    |
| 
       5. 添加签名头域发送到OBS服务  | 
     
       PUT /object HTTP/1.1 Host: bucket.obs.region.example.com Date: Tue, 04 Jun 2019 06:54:59 GMT Content-Type: text/plain Content-Length: 5913 Authorization: OBS AccessKeyID:Signature  | 
    |
| 
       签名验证  | 
     
       6. 接收HTTP消息  | 
     
       PUT /object HTTP/1.1 Host: bucket.obs.region.example.com Date: Tue, 04 Jun 2019 06:54:59 GMT Content-Type: text/plain Content-Length: 5913 Authorization: OBS AccessKeyID:Signature  | 
    
| 
       7. 根据请求中的AK获取SK  | 
     
       从头域Authorization中取出AK,去IAM取回用户的SK  | 
    |
| 
       8. 按照签名规则计算StringToSign  | 
     
       StringToSign = HTTP-Verb + "\n" + Content-MD5 + "\n" + Content-Type + "\n" + Date + "\n" + CanonicalizedHeaders + CanonicalizedResource  | 
    |
| 
       9. 计算签名Signature  | 
     
       Signature = Base64( HMAC-SHA1( SecretAccessKeyID, UTF-8-Encoding-Of( StringToSign ) ) )  | 
    |
| 
       10. 验证签名  | 
     
       验证头域Authorization中的Signature与服务端计算的Signature是否相等 相等:签名验证通过 不相等:签名验证失败  | 
    |