OBS SDK实战 之 用户签名:OBS桶绑定自定义域名后,三种签名方式访问OBS对象
OBS针对不同的用户场景,提供了三种不同的用户签名方式,但是无论哪种签名方式,计算用户签名的算法都是一个很复杂的工作,而OBS SDK向客户封装了签名的生成,所以强烈建议客户尽量不要自建REST API请求,而是通过OBS SDK来使用OBS业务。不过即使OBS SDK封装了用户签名的具体过程,针对不同签名方式,SDK中ObsClient的配置和使用仍然有显著的不同,并且当OBS的自定义域名机制、华为云CDN回源访问机制加入到客户业务之后,客户端更容易出现配置不当导致的签名不匹配。
本文将基于OBS SDK,梳理OBS桶绑定自定义域名(含配置CDN加速前后),客户使用三种不同的签名方式,进行访问OBS业务的代码实例分析。(PS:本文中以Python SDK为例,其他语言的SDK都有类似的对应类、方法和函数)
OBS Rest API提供的三种用户签名方式
在Http Header中携带签名:这种签名方式适用于绝大多数OBS业务请求,并且所有的后续操作都是直接使用ObsClient对象的方法,不需要使用其他的第三方Http库
在Http请求的URL Query参数中携带签名:这种签名方式适用于多数OBS业务请求,ObsClient对象只在计算带签名的URL时需要使用,后续的OBS业务需要使用其他的Http库
在Http Post上传的表单中携带签名:这种签名方式仅适用于POST上传对象的OBS业务请求,同样仅在计算带签名时需要使用ObsClient对象,而真正的OBS业务需要使用其他的Http库
OBS桶绑定自定义域名,没有配置CDN加速的场景
在Http Header中携带签名:
Python SDK样例代码:
执行结果正常:
在URL Query参数中携带签名
Python SDK样例代码:
执行结果正常:
Http Post上传表单中携带签名
Python SDK样例代码:
执行成功:
OBS桶绑定自定义域名,同时配置了CDN加速的场景
OBS桶绑定了自定义域名,并设定了CDN加速
CDN源站类型为“OBS桶域名”
此时的CDN回源HOST配置是写死无法手动编辑的,CDN界面上显示的默认类型为“自定义域名”,域名值为“目标桶域名”
在Http Header中携带签名:
Python SDK样例代码:
执行结果:
在URL Query参数中携带签名:
与之前没有设置CDN加速时相比,此处的SDK使用有所不同,需要特别注意!!
以下为容易出错的Python SDK样例代码:
但是执行结果将会因为签名不匹配报403错误:
在当前的CDN版本下,正确的Python SDK样例代码修改如下
1、ObsClient 初始化时Server需要使用ObsEndpoint而不是自定义域名,is_cname也应该设置为False,然后用client计算出 SignedUrl——确保使用<同名>+<对象名>来计算签名
2、使用第三方库发送Http请求之前,需要将SignedUrl中的ObsEndpoint替换为自定义域名——确保请求发送到华为云CDN服务
3、同时需要将Http Header中的Host替换为自定义域名
此时执行结果正常:
Http Post上传表单中携带签名
Python SDK样例代码:
执行上传操作成功
- 点赞
- 收藏
- 关注作者
评论(0)