Basic认证是客户端通过明文(Base64编码格式)传输用户名和密码到服务端进行认证
curl -u <operator>:<password> http://fss-<区域>.vhostgo.com/<bucket>/
或者,将用户名和密码按 operator:password
拼接 Base64 编码后加在请求头的 Authorization 字段中:
1curl -X GET \
2 http://fss-my.vhostgo.com/<bucket>/ \
3 -H "Authorization: Basic XXXX"
为了避免基本认证中 Base64 编码可逆带来的安全隐患,对象存储提供了签名认证这种更安全的认证方式。它结合请求关键信息和用户身份信息,计算一个消息摘要,作为请求的 Authorization,保证请求的安全。
对于REST API,认证信息 Authorization 放在 Header 中,
签名计算方法
xxxxxxxxxx
71Authorization: WESTYUN <Operator>:<Signature>
2<Signature> = Base64 (HMAC-SHA1 (<Password>,
3<Method>&
4<URI>&
5<Date>&
6<Content-MD5>
7))
相关参数说明
参数 | 必选 | 说明 |
---|---|---|
Operator | 是 | 用户名 |
Method | 是 | 请求方式,如:GET、POST、PUT、HEAD 等 |
URI | 是 | 请求路径,格式为/bucket/URI |
Date | 是 | 请求日期时间,如 Wed, 22 Apr 2020 02:26:58 GMT 或者 2020-04-22 10:26:58 |
Password | 是 | 密码的 base64 值 |
Content-MD5 | 否 | 请求体的 MD5 值,如果文件太大计算 MD5 不方便或请求体为空,可以为空 |
注
&
一起不参与签名计算。所有计算的 MD5 值,格式均是 32 位小写
。30 分钟
内举例
请求签名
xxxxxxxxxx
91// 操作员信息
2Operator = westtest
3Password = base64(westtest) = d2VzdHRlc3Q=
4// 参数信息
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 返回的原生二进制数据进行 Base64 编码
9= JFJ3zn/ilY263BtBzz49dvXk3Kw=
Authorization 签名:
xxxxxxxxxx
11Authorization: WESTYUN westtest:JFJ3zn/ilY263BtBzz49dvXk3Kw=
请求 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
对于FORM API,认证信息 Authorization 放在HTTP的body中。 签名计算方法
xxxxxxxxxx
81Authorization: WESTYUN <Operator>:<Signature>
2<Signature> = Base64 (HMAC-SHA1 (<Password>,
3<Method>&
4<URI>&
5<Date>&
6<Content-MD5>&
7<Policy>
8))
相关参数说明
参数 | 必选 | 说明 |
---|---|---|
Operator | 是 | 用户名 |
Method | 是 | 请求方式,取值为POST |
URI | 是 | 请求路径,格式为/bucket |
Date | 是 | 请求日期时间,如 Wed, 22 Apr 2020 02:26:58 GMT 或者 2020-04-22 10:26:58 |
Password | 是 | 密码的 base64 值 |
Content-MD5 | 否 | 请求体的 MD5 值,如果文件太大计算 MD5 不方便或请求体为空,可以为空 |
Policy | 否 | 上传参数的Base64 编码,详见 Policy 算法 |
注
&
一起不参与签名计算。所有计算的 MD5 值,格式均是 32 位小写
。30 分钟
内生成步骤
注
举例
xxxxxxxxxx
101// 操作员信息
2Operator = westtest
3Password = base64(westtest) = d2VzdHRlc3Q=
4// 参数信息
5Method = PUT
6URI = /westtest/07451cbbc932a122a262e39c6a159e7f.jpg
7Date = 2020-04-23 16:24:46
8// 上传参数,需要计算 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 返回的原生二进制数据进行 Base64 编码
9= w2pjeLG5KNieSR4KrYe/7u7QlbA=
Authorization 签名
xxxxxxxxxx
11authorization=WESTYUN westtest:w2pjeLG5KNieSR4KrYe/7u7QlbA=