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ì)算方法
xxxxxxxxxx71Authorization: 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 位小寫。30 分鐘內(nèi)舉例
請(qǐng)求簽名
xxxxxxxxxx91// 操作員信息2Operator = westtest 3Password = base64(westtest) = d2VzdHRlc3Q=4// 參數(shù)信息5Method = PUT 6URI = /westtest/07451cbbc932a122a262e39c6a159e7f.jpg7Date = 2020-04-23 16:24:468// 上傳文件的 MD59Content-MD5 = 7ac66c0f148de9519b8bd264312c4d64生成 Signature:
xxxxxxxxxx91Signature = 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 簽名:
xxxxxxxxxx11Authorization: WESTYUN westtest:JFJ3zn/ilY263BtBzz49dvXk3Kw=請(qǐng)求 Header:
xxxxxxxxxx71PUT /westtest/07451cbbc932a122a262e39c6a159e7f.jpg HTTP/1.12Authorization: WESTYUN westtest:JFJ3zn/ilY263BtBzz49dvXk3Kw=3Content-MD5: 7ac66c0f148de9519b8bd264312c4d644Date: 2020-04-23 16:24:465Content-Type: image/jpeg6Host: fss-my.vhostgo.com7Content-Length: 33456對(duì)于FORM API,認(rèn)證信息 Authorization 放在HTTP的body中。 簽名計(jì)算方法
xxxxxxxxxx81Authorization: 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 位小寫。30 分鐘內(nèi)生成步驟
注
舉例
xxxxxxxxxx101// 操作員信息2Operator = westtest 3Password = base64(westtest) = d2VzdHRlc3Q=4// 參數(shù)信息5Method = PUT 6URI = /westtest/07451cbbc932a122a262e39c6a159e7f.jpg7Date = 2020-04-23 16:24:468// 上傳參數(shù),需要計(jì)算 Policy9save-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
xxxxxxxxxx91Signature = 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 簽名
xxxxxxxxxx11authorization=WESTYUN westtest:w2pjeLG5KNieSR4KrYe/7u7QlbA=