开发者社区> 问答> 正文

老版图片服务url签名

已解决

展开
收起
2018-03-07 20:58:39 692 0
1 条回答
写回答
取消 提交回答
  • 采纳回答

    详细解答可以参考官方帮助文档

    如果用户需要不经过任何授权,通过浏览器即可匿名访问图片服务来处理图片,需要在创建Bucket的时候将Bucket的权限设置为公共读。

    创建Bucket

    设置Bucket权限

    默认创建的Bucket权限是私有读写,Object默认继承Bucket的权限。 如果用户需要通过图片服务访问私有的Object,需要进行身份鉴权。

    图片服务的用户鉴权方式和OSS是一致的,有两种鉴权方式:

    • 在Header中包含签名
    • 在URL中包含签名

    具体可参考在Header中包含签名在URL中包含签名

    在URL中包含签名

    假定用户绑定的域名www.test.com对应的频道名字为image-demo,object名字为example.jpg,转换字符串为100w.jpg

    首先需要计算Signature字段,计算方法如下:

    Signature = base64(hmac-sha1(AccessKeySecret, 
                VERB + "\n" 
                + Content-MD5 + "\n" 
                + Content-Type + "\n" 
                + Expires + "\n" 
                + CanonicalizedOSSHeaders
                + CanonicalizedResource))
    
    • AccessKeySecret表示签名所需的秘钥
    • VERB表示HTTP请求方法,例如PUT,GET,DELETE等
    • Content-MD5表示请求内容数据的MD5值,对于图片处理服务这里为空字符串
    • Content-Type表示请求内容的类型,对于图片处理服务这里为空字符串
    • Expires表示授权给用户URL签名过期时间
    • CanonicalizedOSSHeaders表示HTTP中的ObjectMeta组合,对于图片处理服务这里为空字符串
    • CanonicalizedResource 表示用户想要访问的OSS资源,在图片处理服务中这项的组成,格式为/channelname/object@处理参数。
    • 构建CanonicalizedResource的方法如下:
      1. 将CanonicalizedResource置成空字符串("")
      2. 放入要访问的图片服务资源:“`/channelname/object”(无Object则不填)
      3. 在结尾添加处理参数:@处理参数,(无处理参数则不填)。此时CanonicalizedResource例子如:/channelname/object@100w.jpg
      4. 如果涉及样式管理操作,那么将这些查询字符串及其请求值按照字典序,以&分割,添加到CanonicalizedResource中。此时的CanonicalizedResource例子:/channelname?style&styleName=YourStyleName

    例子中的CanonicalizedResource为/image-demo/example.jpg@100w.jpg

    注意:上例中的转换字符串可以是简单缩略,文字水印,图片水印、管道和样式(样式的分隔符是@!)
    

    这里需要注意的是,使用URL签名中Expires和CanonicalizedResource不能为空。

    最后生成在URL签名,必须在参数后包含OSSAccessKeyId、Expires、Signature这三项,具体生成方法可以参考OSS的API文档中的在URL中包含签名,上文的例子生成的URL签名如下:

    http://www.test.com/example.jpg%40100w.jpg?OSSAccessKeyId=j4y55h3z88ihxxhlr9nhjjis&Expires=1392949804&Signature=IDBJ09e8Ow4GaPRM1yIf7plH/CI%3D
    

    在Header中包含签名

    除了在URL中包含签名之外,还可以在HTTP请求的Header中包含签名,签名是由Authorization这个Header指定的,具体的构成规则如下:

    "Authorization: OSS " + AccessKeyId + ":" + Signature
    Signature = base64(hmac-sha1(AccessKeySecret,
                VERB + "\n" 
                + Content-MD5 + "\n" 
                + Content-Type + "\n" 
                + Date + "\n" 
                + CanonicalizedOSSHeaders
                + CanonicalizedResource))
    
    • AccessKeySecret表示签名所需的秘钥
    • VERB表示HTTP请求方法,例如PUT,GET,DELETE等
    • Content-MD5表示请求内容数据的MD5值,对于图片处理服务这里为空字符串
    • Content-Type表示请求内容的类型,对于图片处理服务这里为空字符串
    • Date表示此次操作的时间,且必须为HTTP1.1中支持的GMT格式
    • CanonicalizedOSSHeaders表示 http中的object meta组合,对于图片处理服务这里为空字符串
    • CanonicalizedResource构造方法请参考上文URL签名中的CanonicalizedResource的生成方法。

    需要注意的

    • Date和CanonicalizedResource不能为空
    • 如果请求中的Date时间和OSS服务器的时间差正负15分钟以上,OSS图片处理服务将拒绝该服务,并返回HTTP 403错误。
    2018-03-08 12:44:58
    赞同 展开评论 打赏
问答标签:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载