使用临时token上传阿里oss,是否可以考虑支持一下,或者有其他什么方案可以使用的?

功能建议 · 315 次浏览
nk-wlb 创建于 2024-09-04 14:34

目前该模块可以使用永久的 AccessKey 和 AccessKeySecret,我测试了 临时的 AccessKey + AccessKeySecret + SecurityToken 暂时无法访问,报错一下内容,是否可以考虑支持一下?

The OSS Access Key Id you provided does not exist in our records. The Security Token may be lost to specify that it is a STS Access Id.

临时身份凭证是下面这种,对应链接为: https://help.aliyun.com/zh/oss/developer-reference/python-configuration-access-credentials?spm=a2c4g.11186623.0.0.45c9e93dWLdz1C#107b7ddcebo93



临时的AccessKeySecret 和 AccessKeyId 的格式是这样子的,生成方式为:https://help.aliyun.com/zh/ram/developer-reference/api-sts-2015-04-01-assumerole?spm=a2c4g.11186623.0.0.82425d0fZW4iGS

 


回复内容
nk-wlb 2024-09-04 15:06
#1
Python实现方式

```python
import oss2

access_key_id = '<ACCESS_KEY_ID>'
access_key_secret = '<ACCESS_KEY_SECRET>'
security_token = '<SECURITY_TOKEN>'
endpoint = '<ENDPOINT 不带http://>' # 根据你的Bucket所在的区域更改
bucket_name = '<BUCKET_NAME>'
object_name = '<OBJECT_NAME>'
local_file_path = '<LOCAL_FILE_PATH>'


# 使用临时访问凭证中的认证信息初始化StsAuth实例
auth = oss2.StsAuth(access_key_id, access_key_secret, security_token)
bucket = oss2.Bucket(auth=auth, endpoint=endpoint, bucket_name=bucket_name, connect_timeout=30)

with open(local_file_path, 'rb') as f:
file_steam = f.read()
bucket.put_object(object_name, file_steam, headers={'Content-Type': 'image/jpg'})
print(bucket.sign_url('GET', object_name, 100))
```
CL 2024-09-04 16:20
#2

这个我如果没有理解错的话,也需要使用 AccessKey 和 AccessKeySecret来获取STSToken。 它的使用场景大概是在你自己的服务端计算好临时token以后发送给客户端临时使用,避免把 AccessKey 和 AccessKeySecret泄露给客户端。 

这和quicker这里不太一样的。 

阿里云应该可以创建多个账号,你可以创建一个专门上传文件的账号,设置好权限,给这个账号创建 AccessKey 和 AccessKeySecret来使用。

CL 最后更新于 2024-09-04 16:20
回复主贴