2. 上传凭证¶
从安全角度考虑,NOS的上传服务都需要进行用户认证,无论是公开桶还是私有桶。因此,用户在使用直传服务的时候也需要构造认证信息。构造认证信息包括构造上传策略和计算上传凭证。下面所用到的AccessKey和SecretKey来进行签名验证,开通服务与AccessKey请参考 访问控制 :
2.1. 上传策略¶
{
"Bucket" : "doc",
"Object" : "anne.jpg",
"Expires" : 1451491200
}
名称 | 描述 | 是否必须 |
---|---|---|
Bucket | 桶名 | 是 |
Object | 存储在NOS的对象名 | 是 |
Expires | 过期时间,(Unix时间),单位:秒 | 否 |
2.2. 计算上传凭证¶
根据上面构造的上传策略可以进一步构造上传凭证,步骤为:
- 将上传策略转换为json格式
{"Bucket":"doc","Object":"anne.jpg","Expires":1451491200}
- 对JSON编码的上传策略进行Base64编码,得到待签名字符串
encodedPutPolicy = base64_encode(putPolicy)
例如,对于以上事例,在Base64编码后,将得到:
eyJCdWNrZXQiOiJkb2MiLCJPYmplY3QiOiJhbm5lLmpwZyIsIkV4cGlyZXMiOjE0NTE0OTEyMDB9
- 使用SecertKey对上一步生成的待签名字符串计算HMAC-SHA1签名
sign = hmac_sha256(encodedPutPolicy, "<SecretKey>")
- 对签名进行Base64编码
encodedSign = base64_encode(sign)
例如,假设SecretKey = "SecretKey",则经过hmac_sha256签名并经过Base64编码之后得到:
v8Q5BNIJuEoi6zckOzPuC5hADL4t/zNaecakkk8STuE=
- 最终客户端在上传时,按以下方式填充 “x-nos-token” 头部
UPLOAD AccessKey:encodedSign:encodedPutPolicy
2.3. 示例¶
如果上传策略为:{“Bucket”:”doc”,”Object”:”anne.jpg”,”Expires”:1451491200},AccessKey为:b6ff5ed65d1041e9a56e2257a2672990,SecretKey为: ae0208eea57c4bc9bc5754368c06a542.计算后对应的”x-nos-token”为:
UPLOAD b6ff5ed65d1041e9a56e2257a2672990:+SL08gyotpanS0qQdqugiWVdDSlsfrQr6YXUNw0Nkz4=:eyJCdWNrZXQiOiJkb2MiLCJPYmplY3QiOiJhbm5lLmpwZyIsIkV4cGlyZXMiOjE0NTE0OTEyMDB9