本文介绍图片处理服务如何进行用户鉴权。
如果用户需要不经过任何授权,通过浏览器即可匿名访问图片服务来处理图片,需要在创建Bucket的时候将Bucket的权限设置为公共读。
创建Bucket
设置Bucket权限
控制台:修改存储空间读写权限
SDK:Java SDK-Bucket中设置Bucket ACL
API:PutBucketAcl
默认创建的Bucket权限是私有读写,Object默认继承Bucket的权限。 如果用户需要通过图片服务访问私有的Object,需要进行身份鉴权。
图片服务的用户鉴权方式和OSS是一致的,有两种鉴权方式:
在Header中包含签名
在URL中包含签名
具体可参见在Header中包含签名和在URL中包含签名。
在URL中包含签名
假定用户绑定的域名example.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
的方法如下:将CanonicalizedResource置成空字符串("")。
放入要访问的图片服务资源:“`/channelname/object”(无Object则不填)。
在结尾添加处理参数:@处理参数(无处理参数则不填)。此时CanonicalizedResource示例:
/channelname/object@100w.jpg
。如果涉及样式管理操作,那么将这些查询字符串及其请求值按照字典序,以
&
分割,添加到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://example.com/example.jpg%40100w.jpg?OSSAccessKeyId=j4y55h******xxhlr9nhjjis&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错误。