s3 authorization v2
参数传递
通过Authorization
请求头
1 | Authorization: AWS AWSAccessKeyId:Signature |
AWSAccessKeyId
: 你的AccessKey
Signature
: 计算得到的签名
eg:
1 | Authorization: AWS ziw5dp1alvty9n47qksu:frJIUN8DYpKDtOLCwo//yllqDzg= |
通过请求参数
HTTP请求中的参数:
AWSAccessKeyId
: 你的AccessKey
Signature
: 计算得到的签名Expires
: 签名的过期时间
eg:
1 | GET /yourbucket/yourkey?AWSAccessKeyId=ziw5dp1alvty9n47qksu&Expires=1141889120&Signature=vjbyPxybdZaNmGa%2ByT272YEAiv4%3D |
签名计算
1 | Signature = Base64(HMAC-SHA1(YourSecretKey, UTF-8-Encoding-Of(StringToSign))) |
- YourSecretKey: 你的
SecretKey
- StringToSign
StringToSign
1 | StringToSign = HTTP-Verb + "\n" + |
- HTTP-Verb: 请求的方法,如:
PUT
,GET
,DELETE
,POST
- Content-MD5: 请求头Content-MD5的内容,如果没有这个头,由空字符串代替
- Content-Type: 请求头Content-Type的内容,如果没有这个头,由空字符串代替
- Date|Expires: 如果使用Authorization头携带签名信息,为Date头的内容,如果没有Date头,由空字符串代替;如果使用请求参数携带签名信息,为参数Expires的内容
- CanonicalizedAmzHeaders: 请求中所有以x-amz-开始的头所组成的字符串,如果没有这样的头,由空字符串代替
eg:1
2
3
4
5
6
7
8
9
10原始请求头:
Date: Tue, 27 Mar 2007 19:36:42 +0000
X-Amz-b: Bar
x-amz-a: foob
x-Amz-a: fooa
Host: johnsmith.s3.amazonaws.com
对应的CanonicalizedAmzHeaders为:
x-amz-a:fooa,foob
x-amz-b:Bar - CanonicalizedResource: 请求所对应的资源
eg:1
2
3
4
5
6
7
8
9GET /?foo=bar
GET /yourbucket/yourkey?foo=bar
GET /yourbucket/yourkey?acl&foo=bar
对应的nicalizedResource分别为:
/
/yourbucket/yourkey
/yourbucket/yourkey?acl