开发者社区> 问答> 正文

python sdk生成签名url

已解决

展开
收起
2018-07-05 00:38:42 1527 0
1 条回答
写回答
取消 提交回答
  • 采纳回答

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

    使用签名URL进行临时授权

    您可以将生成的签名URL提供给访客进行临时访问。生成签名URL时,您可以指定URL的过期时间,来限制访客的访问时长。

    以下代码用于使用签名URL下载文件:

    1. # -*- coding: utf-8 -*-
    2. import oss2
    3. # 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。
    4. auth = oss2.Auth('<yourAccessKeyId>', '<yourAccessKeySecret>')
    5. # Endpoint以杭州为例,其它Region请按实际情况填写。
    6. bucket = oss2.Bucket(auth, 'http://oss-cn-hangzhou.aliyuncs.com', '<yourBucketName>')
    7. # 设置此签名URL在60秒内有效。
    8. print(bucket.sign_url('GET', '<yourObjectName>', 60))

    使用STS进行临时授权

    您可以通过STS(Security Token Service)进行临时授权访问。更多有关STS的内容请参见访问控制API参考(STS)中的简介。关于账号及授权的详细信息请参见最佳实践中的STS临时授权访问

    首先您需要安装官方的Python STS客户端:

    1. pip install aliyun-python-sdk-sts

    请使用2.0.6及以上版本。以下代码用于使用STS临时授权上传文件:

    1. # -*- coding: utf-8 -*-
    2. from aliyunsdkcore import client
    3. from aliyunsdksts.request.v20150401 import AssumeRoleRequest
    4. import json
    5. import oss2
    6. # Endpoint以杭州为例,其它Region请按实际情况填写。
    7. endpoint = 'oss-cn-hangzhou.aliyuncs.com'
    8. # 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。
    9. access_key_id = '<yourAccessKeyId>'
    10. access_key_secret = '<yourAccessKeySecret>'
    11. bucket_name = '<yourBucketName>'
    12. # role_arn是角色的资源名称。
    13. role_arn = '<yourRoleArn>'
    14. clt = client.AcsClient(access_key_id, access_key_secret, 'cn-hangzhou')
    15. req = AssumeRoleRequest.AssumeRoleRequest()
    16. # 设置返回值格式为JSON。
    17. req.set_accept_format('json')
    18. req.set_RoleArn(role_arn)
    19. req.set_RoleSessionName('session-name')
    20. body = clt.do_action(req)
    21. # 使用RAM账号的AccessKeyId和AccessKeySecret向STS申请临时token。
    22. token = json.loads(body)
    23. # 使用临时token中的认证信息初始化StsAuth实例。
    24. auth = oss2.StsAuth(token['Credentials']['AccessKeyId'],
    25. token['Credentials']['AccessKeySecret'],
    26. token['Credentials']['SecurityToken'])
    27. # 使用StsAuth实例初始化存储空间。
    28. bucket = oss2.Bucket(auth, endpoint, bucket_name)
    29. # 上传一个字符串。
    30. bucket.put_object('object-name.txt', b'hello world')

    STS应用完整的示例代码请参见GitHub

    2018-07-09 00:48:52
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
From Python Scikit-Learn to Sc 立即下载
Data Pre-Processing in Python: 立即下载
双剑合璧-Python和大数据计算平台的结合 立即下载