2. 上传凭证

从安全角度考虑,NOS的上传服务都需要进行用户认证,无论是公开桶还是私有桶。因此,用户在使用直传服务的时候也需要构造认证信息。构造认证信息包括构造上传策略和计算上传凭证。下面所用到的AccessKey和SecretKey来进行签名验证,开通服务与AccessKey请参考 访问控制 :

2.1. 上传策略

{
  "Bucket" : "doc",
  "Object" : "anne.jpg",
  "Expires" : 1451491200
}
名称 描述 是否必须
Bucket 桶名
Object 存储在NOS的对象名
Expires 过期时间,(Unix时间),单位:秒

2.2. 计算上传凭证

根据上面构造的上传策略可以进一步构造上传凭证,步骤为:

  1. 将上传策略转换为json格式
{"Bucket":"doc","Object":"anne.jpg","Expires":1451491200}
  1. 对JSON编码的上传策略进行Base64编码,得到待签名字符串
encodedPutPolicy = base64_encode(putPolicy)
例如,对于以上事例,在Base64编码后,将得到:
eyJCdWNrZXQiOiJkb2MiLCJPYmplY3QiOiJhbm5lLmpwZyIsIkV4cGlyZXMiOjE0NTE0OTEyMDB9
  1. 使用SecertKey对上一步生成的待签名字符串计算HMAC-SHA1签名
sign = hmac_sha256(encodedPutPolicy, "<SecretKey>")
  1. 对签名进行Base64编码
encodedSign = base64_encode(sign)
例如,假设SecretKey = "SecretKey",则经过hmac_sha256签名并经过Base64编码之后得到:

v8Q5BNIJuEoi6zckOzPuC5hADL4t/zNaecakkk8STuE=
  1. 最终客户端在上传时,按以下方式填充 “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