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