生成带授权信息的-九游平台
功能说明
通过访问密钥、请求方法类型、请求参数等信息生成一个在query参数中携带鉴权信息的url,可将该url提供给其他用户进行临时访问。在生成url时,需要指定url的有效期来限制访客用户的访问时长。
如果想授予其他用户对桶或对象临时进行其他操作的权限(例如上传或下载对象),则需要生成带对应请求的url后(例如使用生成put请求的url上传对象),将该url提供给其他用户。
接口约束
- obs支持的region与endpoint的对应关系,详细信息请参见。
- 如果遇到跨域报错、签名不匹配问题,请参考以下步骤排查问题:
- 未配置跨域,需要在控制台配置cors规则,请参考。
- 签名计算问题,请参考url中携带签名排查签名参数是否正确;比如上传对象功能,后端将content-type参与计算签名生成授权url,但是前端使用授权url时没有设置content-type字段或者传入错误的值,此时会出现跨域错误。九游平台的解决方案为:content-type字段前后端保持一致。
方法定义
obsclient.createsigned
请求参数
参数名称 |
参数类型 |
是否必选 |
描述 |
---|---|---|---|
method |
str |
必选 |
参数解释: http方法类型 取值范围:
默认取值: 无 |
bucketname |
str |
可选 |
参数解释: 桶名。 约束限制:
默认取值: 无 |
objectkey |
str |
可选 |
参数解释: 对象名。对象名是对象在存储桶中的唯一标识。对象名是对象在桶中的完整路径,路径中不包含桶名。 例如,您对象的访问地址为examplebucket.obs.cn-north-4.myhuaweicloud.com/folder/test.txt 中,对象名为folder/test.txt。 取值范围: 长度大于0且不超过1024的字符串。 默认取值: 无 |
specialparam |
str |
可选 |
参数解释: 特殊操作符,代表要操作的子资源, 取值范围:
默认取值: 无 |
expires |
int |
可选 |
参数解释: 带授权信息的url的过期时间。 取值范围:
默认取值: 300秒 |
headers |
dict |
可选 |
参数解释: 请求中携带的头域。 默认取值: 无 |
queryparams |
dict |
可选 |
参数解释: 请求中携带的查询参数。 默认取值: 无 |

如果遇到跨域报错、签名不匹配问题,请参考以下步骤排查问题:
- 未配置跨域,需要在控制台配置cors规则,请参考。
- 签名计算问题,请参考url中携带签名排查签名参数是否正确;比如上传对象功能,后端将content-type参与计算签名生成授权url,但是前端使用授权url时没有设置content-type字段或者传入错误的值,此时会出现跨域错误。九游平台的解决方案为:content-type字段前后端保持一致。
返回结果
参数名称 |
参数类型 |
描述 |
---|---|---|
signedurl |
str |
参数解释: 带授权信息的url。 默认取值: 无 |
actualsignedrequestheaders |
dict |
参数解释: 通过带授权信息的url发起请求时实际应携带的头域。 默认取值: 无 |
代码样例
此用例用于生成带授权信息的临时url。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 |
from obs import obsclient import os import traceback import base64 # 推荐通过环境变量获取aksk,这里也可以使用其他外部引入方式传入,如果使用硬编码可能会存在泄露风险 # 您可以登录访问管理控制台获取访问密钥ak/sk,获取方式请参见https://support.huaweicloud.com/usermanual-ca/ca_01_0003.html ak = os.getenv("accesskeyid") sk = os.getenv("secretaccesskey") # 【可选】如果使用临时aksk和securitytoken访问obs,则同样推荐通过环境变量获取 # security_token = os.getenv("securitytoken") # server填写bucket对应的endpoint, 这里以华北-北京四为例,其他地区请按实际情况填写 server = "https://obs.cn-north-4.myhuaweicloud.com" # 创建obsclient实例 # 如果使用临时aksk和securitytoken访问obs,需要在创建实例时通过security_token参数指定securitytoken值 obsclient = obsclient(access_key_id=ak, secret_access_key=sk, server=server) try: # 生成创建桶的带授权信息的url res1 = obsclient.createsignedurl(method='put', bucketname='bucketname', expires=3600) print('signedurl:', res1.signedurl) print('actualsignedrequestheaders:', res1.actualsignedrequestheaders) # 生成上传对象的带授权信息的url res2 = obsclient.createsignedurl(method='put', bucketname='bucketname', objectkey='objectkey', expires=3600, headers={'content-type': 'text/plain'}) print('signedurl:', res2.signedurl) print('actualsignedrequestheaders:', res2.actualsignedrequestheaders) # 生成设置对象acl的带授权信息的url res3 = obsclient.createsignedurl(method='put', bucketname='bucketname', objectkey='objectkey', specialparam='acl', expires=3600, headers={'x-obs-acl': 'private'}) print('signedurl:', res3.signedurl) print('actualsignedrequestheaders:', res3.actualsignedrequestheaders) # 生成下载对象的带授权信息的url res4 = obsclient.createsignedurl(method='get', bucketname='bucketname', objectkey='objectkey', expires=3600) print('signedurl:', res4.signedurl) print('actualsignedrequestheaders:', res4.actualsignedrequestheaders) # 生成删除对象的带授权信息的url res5 = obsclient.createsignedurl(method='delete', bucketname='bucketname', objectkey='objectkey', expires=3600) print('signedurl:', res5.signedurl) print('actualsignedrequestheaders:', res5.actualsignedrequestheaders) # 生成删除桶的带授权信息的url res6 = obsclient.createsignedurl(method='delete', bucketname='bucketname', expires=3600) print('signedurl:', res6.signedurl) print('actualsignedrequestheaders:', res6.actualsignedrequestheaders) # 生成设置初始化分段任务的带授权信息的url res7 = obsclient.createsignedurl(method='post', bucketname='bucketname', objectkey='objectkey', specialparam='uploads', expires=3600) print('signedurl:', res7.signedurl) print('actualsignedrequestheaders:', res7.actualsignedrequestheaders) # 生成上传段的带授权信息的url, res8 = obsclient.createsignedurl(method='put', bucketname='bucketname', objectkey='objectkey', expires=3600, queryparams={'partnumber': '1', 'uploadid': '00000*****'}) print('signedurl:', res8.signedurl) print('actualsignedrequestheaders:', res8.actualsignedrequestheaders) # 生成合并段的带授权信息的url res9 = obsclient.createsignedurl(method='post', bucketname='bucketname', objectkey='objectkey', expires=3600, queryparams={'uploadid': '00000*****'}) print('signedurl:', res9.signedurl) print('actualsignedrequestheaders:', res9.actualsignedrequestheaders) # 生成图片持久化处理的带授权信息的url # 源对象所在的桶名 bucketname = 'originbucketname'; # 处理前的源对象名 objectkey = 'test.png'; # 处理后的对象名 targetobjectname ="save.png" # 处理后保存的桶名, 可选参数 targetbucketname ="savebucketname" queryparams={} queryparams["x-image-process"]="image/resize,w_100" queryparams["x-image-save-object"]=base64.b64encode(targetobjectname .encode("utf-8")).decode() # 可选参数 queryparams["x-image-save-bucket"]=base64.b64encode(targetbucketname .encode("utf-8")).decode() res10 = obsclient.createsignedurl(method='get', bucketname=bucketname, objectkey=objectkey, queryparams=queryparams, expires=3600) print('signedurl:', res10.signedurl) print('actualsignedrequestheaders:', res10.actualsignedrequestheaders) except: print(traceback.format_exc()) |
相关文档
意见反馈
文档内容是否对您有帮助?
如您有其它疑问,您也可以通过华为云社区问答频道来与我们联系探讨