Basic認(rèn)證是客戶端通過(guò)明文(Base64編碼格式)傳輸用戶名和密碼到服務(wù)端進(jìn)行認(rèn)證
curl -u <operator>:<password> http://fss-<區(qū)域>.vhostgo.com/<bucket>/
或者,將用戶名和密碼按 operator:password
拼接 Base64 編碼后加在請(qǐng)求頭的 Authorization 字段中:
1curl -X GET \
2 http://fss-my.vhostgo.com/<bucket>/ \
3 -H "Authorization: Basic XXXX"
為了避免基本認(rèn)證中 Base64 編碼可逆帶來(lái)的安全隱患,對(duì)象存儲(chǔ)提供了簽名認(rèn)證這種更安全的認(rèn)證方式。它結(jié)合請(qǐng)求關(guān)鍵信息和用戶身份信息,計(jì)算一個(gè)消息摘要,作為請(qǐng)求的 Authorization,保證請(qǐng)求的安全。
對(duì)于REST API,認(rèn)證信息 Authorization 放在 Header 中,
簽名計(jì)算方法
xxxxxxxxxx
71Authorization: WESTYUN <Operator>:<Signature>
2<Signature> = Base64 (HMAC-SHA1 (<Password>,
3<Method>&
4<URI>&
5<Date>&
6<Content-MD5>
7))
相關(guān)參數(shù)說(shuō)明
參數(shù) | 必選 | 說(shuō)明 |
---|---|---|
Operator | 是 | 用戶名 |
Method | 是 | 請(qǐng)求方式,如:GET、POST、PUT、HEAD 等 |
URI | 是 | 請(qǐng)求路徑,格式為/bucket/URI |
Date | 是 | 請(qǐng)求日期時(shí)間,如 Wed, 22 Apr 2020 02:26:58 GMT 或者 2020-04-22 10:26:58 |
Password | 是 | 密碼的 base64 值 |
Content-MD5 | 否 | 請(qǐng)求體的 MD5 值,如果文件太大計(jì)算 MD5 不方便或請(qǐng)求體為空,可以為空 |
注
&
一起不參與簽名計(jì)算。所有計(jì)算的 MD5 值,格式均是 32 位小寫(xiě)
。30 分鐘
內(nèi)舉例
請(qǐng)求簽名
xxxxxxxxxx
91// 操作員信息
2Operator = westtest
3Password = base64(westtest) = d2VzdHRlc3Q=
4// 參數(shù)信息
5Method = PUT
6URI = /westtest/07451cbbc932a122a262e39c6a159e7f.jpg
7Date = 2020-04-23 16:24:46
8// 上傳文件的 MD5
9Content-MD5 = 7ac66c0f148de9519b8bd264312c4d64
生成 Signature:
xxxxxxxxxx
91Signature = Base64 (HMAC-SHA1 (<Password>,
2<Method>&
3<URI>&
4<Date>&
5<Content-MD5>
6))
7= Base64 (HMAC-SHA1 (d2VzdHRlc3Q=,PUT&/westtest/07451cbbc932a122a262e39c6a159e7f.jpg&2020-04-23 16:13:54&7ac66c0f148de9519b8bd264312c4d64))
8// HMAC-SHA1 返回的原生二進(jìn)制數(shù)據(jù)進(jìn)行 Base64 編碼
9= JFJ3zn/ilY263BtBzz49dvXk3Kw=
Authorization 簽名:
xxxxxxxxxx
11Authorization: WESTYUN westtest:JFJ3zn/ilY263BtBzz49dvXk3Kw=
請(qǐng)求 Header:
xxxxxxxxxx
71PUT /westtest/07451cbbc932a122a262e39c6a159e7f.jpg HTTP/1.1
2Authorization: WESTYUN westtest:JFJ3zn/ilY263BtBzz49dvXk3Kw=
3Content-MD5: 7ac66c0f148de9519b8bd264312c4d64
4Date: 2020-04-23 16:24:46
5Content-Type: image/jpeg
6Host: fss-my.vhostgo.com
7Content-Length: 33456
對(duì)于FORM API,認(rèn)證信息 Authorization 放在HTTP的body中。 簽名計(jì)算方法
xxxxxxxxxx
81Authorization: WESTYUN <Operator>:<Signature>
2<Signature> = Base64 (HMAC-SHA1 (<Password>,
3<Method>&
4<URI>&
5<Date>&
6<Content-MD5>&
7<Policy>
8))
相關(guān)參數(shù)說(shuō)明
參數(shù) | 必選 | 說(shuō)明 |
---|---|---|
Operator | 是 | 用戶名 |
Method | 是 | 請(qǐng)求方式,取值為POST |
URI | 是 | 請(qǐng)求路徑,格式為/bucket |
Date | 是 | 請(qǐng)求日期時(shí)間,如 Wed, 22 Apr 2020 02:26:58 GMT 或者 2020-04-22 10:26:58 |
Password | 是 | 密碼的 base64 值 |
Content-MD5 | 否 | 請(qǐng)求體的 MD5 值,如果文件太大計(jì)算 MD5 不方便或請(qǐng)求體為空,可以為空 |
Policy | 否 | 上傳參數(shù)的Base64 編碼,詳見(jiàn) Policy 算法 |
注
&
一起不參與簽名計(jì)算。所有計(jì)算的 MD5 值,格式均是 32 位小寫(xiě)
。30 分鐘
內(nèi)生成步驟
注
舉例
xxxxxxxxxx
101// 操作員信息
2Operator = westtest
3Password = base64(westtest) = d2VzdHRlc3Q=
4// 參數(shù)信息
5Method = PUT
6URI = /westtest/07451cbbc932a122a262e39c6a159e7f.jpg
7Date = 2020-04-23 16:24:46
8// 上傳參數(shù),需要計(jì)算 Policy
9save-key = /{year}/{mon}/{day}/west_{random32}{.suffix}
10expiration = 1800
生成 Policy
?x1Policy = Base64 ({"save-key": "/{year}/{mon}/{day}/west_{random32}{.suffix}", "expiration": 1800)}
2 = eyJzYXZlLWtleSI6Ii97eWVhcn0ve21vbn0ve2RheX0vd2VzdF97cmFuZG9tMzJ9ey5zdWZmaXh9IiwiZXhwaXJhdGlvbiI6MTgwMH0=
3?
生成 Signature
xxxxxxxxxx
91Signature = Base64 (HMAC-SHA1 (<Password>,
2<Method>&
3<URI>&
4<Date>&
5<policy>
6))
7= Base64 (HMAC-SHA1 (d2VzdHRlc3Q=,POST&/westtest&2023-06-05 10:54:01&eyJzYXZlLWtleSI6Ii97eWVhcn0ve21vbn0ve2RheX0vd2VzdF97cmFuZG9tMzJ9ey5zdWZmaXh9IiwiZXhwaXJhdGlvbiI6MTgwMH0=))
8// HMAC-SHA1 返回的原生二進(jìn)制數(shù)據(jù)進(jìn)行 Base64 編碼
9= w2pjeLG5KNieSR4KrYe/7u7QlbA=
Authorization 簽名
xxxxxxxxxx
11authorization=WESTYUN westtest:w2pjeLG5KNieSR4KrYe/7u7QlbA=