Python后端Flask怎样实现云存储直接上传_生成临时STS凭证供前端免密直传OSS

夜墨酱_1244

夜墨酱_1244

2026-04-21

279人浏览

原创

Forge — Python Developer
Forge — Python Developer

Python开发助手 — 自动化脚本、API封装、命令行工具、数据管道、网页爬虫。经过测试的代码,包含错误处理和文档。当你需要...

下载
不能让前端直接用后端accesskey上传oss,因会泄露主账号密钥;必须用sts临时凭证,由flask调用aliyun-python-sdk-sts以ram子用户ak/sk发起assumerole请求,返回含accesskeyid、accesskeysecret、securitytoken的临时凭证供前端ali-oss sdk直传。

python后端flask怎样实现云存储直接上传_生成临时sts凭证供前端免密直传oss

为什么不能让前端直接用后端的AccessKey上传OSS

因为把 AccessKeyId 和 AccessKeySecret 硬编码或透传给前端,等于公开了主账号密钥——哪怕加了Referer白名单,也能被爬虫抓包复用,权限失控风险极高。必须用临时凭证(STS Token)隔离权限,且限定 bucket、path、过期时间、操作类型。

Flask怎么生成合法的STS临时凭证(阿里云OSS场景)

要用阿里云官方 SDK aliyun-python-sdk-sts,不是自己拼签名。关键点是:必须用 RAM 子用户(非主账号)的 AK/SK 初始化客户端,并为该子用户授予最小化 sts:AssumeRole 权限(对应角色需提前在 RAM 控制台配置信任策略和权限策略)。

  • 安装依赖:pip install aliyun-python-sdk-core aliyun-python-sdk-sts
  • 角色 ARN 示例:acs:ram::1234567890123456:role/oss-upload-role,需确保该角色允许被你的子用户扮演
  • 调用 AssumeRoleRequest 时,DurationSeconds 建议设为 900–3600(15–60分钟),太长不安全,太短前端来不及传完大文件
  • 返回的 Credentials 包含 AccessKeyId、AccessKeySecret、SecurityToken,三者缺一不可
from aliyunsdkcore.client import AcsClient
from aliyunsdksts.request.v20150401 import AssumeRoleRequest
<p>client = AcsClient('SUBUSER_AK', 'SUBUSER_SK', 'cn-hangzhou')
req = AssumeRoleRequest.AssumeRoleRequest()
req.set_RoleArn('acs:ram::1234567890123456:role/oss-upload-role')
req.set_RoleSessionName('flask-upload-session-' + str(int(time.time())))
req.set_DurationSeconds(1800)
res = client.do_action_with_exception(req)</p><h1>res 是 JSON 字符串,需 json.loads;注意捕获 ClientException / ServerException</h1><p></p>

前端直传OSS需要哪些参数?后端要怎么塞进响应里

前端用 OSS 的 ali-oss SDK 直传,最少需要 5 个字段:region、bucket、accessKeyId、accessKeySecret、securityToken。别漏掉 securityToken —— 没它会报 InvalidToken 错误。

  • region 必须和 OSS bucket 所在地域一致(如 oss-cn-hangzhou),不是 STS 接口的 region
  • bucket 必须明确指定,不能留空;若需按用户分目录,建议后端生成带前缀的 dir(如 user_123/),并限制 STS 角色 Policy 中的 Resource 为 acs:oss:*:*:your-bucket/user_123/*
  • 响应体建议用 JSON,字段名保持和 ali-oss 构造函数参数一致,避免前端二次映射出错
# Flask 路由示例
@app.route('/api/oss/sts', methods=['GET'])
def get_oss_sts():
    # ... 上面的 AssumeRole 调用逻辑
    data = json.loads(res)
    return jsonify({
        "region": "oss-cn-hangzhou",
        "bucket": "my-app-bucket",
        "accessKeyId": data["Credentials"]["AccessKeyId"],
        "accessKeySecret": data["Credentials"]["AccessKeySecret"],
        "securityToken": data["Credentials"]["SecurityToken"]
    })

常见报错和绕不过去的坑

很多问题卡在 RAM 权限模型和 STS 签名链路上,和 Flask 关系不大,但排查时容易误判。

  • InvalidAccessKeyId:多半是用了主账号 AK,或子用户没开 sts:AssumeRole 权限
  • PolicyRestrictionViolation:STS 角色的权限策略太宽(比如允许 *),阿里云会拒绝签发;必须显式声明 oss:PutObject 和资源路径
  • 前端上传报 MissingSecurityToken:后端返回漏了 securityToken,或前端初始化 client 时没传这个字段
  • 上传成功但文件 0 字节:OSS 默认不自动处理表单上传的 key 字段,前端必须用 new OSS(...) 实例调 put() 或 multipartUpload(),别手写 POST 表单
  • STS 凭证过期后前端还在用旧 token:前端应监听 onError,捕获 ExpiredToken 后重新请求 /api/oss/sts

真正麻烦的从来不是 Flask 写几行代码,而是 RAM 角色、信任策略、权限策略三者之间的咬合关系——少配一条 Allow,整个链路就断在 STS 那一环,错误提示还极其模糊。

Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

python 前端 云存储

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
python是前端还是后端
python是前端还是后端

Python属于前端也属于后端,其灵活性和丰富的生态系统使得开发人员能够在不同的领域中灵活运用。本专题为大家提供python相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.11

2503

5

前端和后端的区别
前端和后端的区别

前端关注的是用户界面的设计和交互,而后端则注重数据处理和逻辑控制。想了解更多前端后端的相关内容,可以阅读本专题下面的文章。

2024.03.19

6450

13

后端的主要工作内容介绍
后端的主要工作内容介绍

后端是应用程序的服务端部分,负责核心任务,如数据库交互、业务逻辑处理和响应客户端请求。想了解更多后端的相关内容,可以阅读本专题下面的文章。

2024.03.19

5866

10

python是前端还是后端
python是前端还是后端

Python属于前端也属于后端,其灵活性和丰富的生态系统使得开发人员能够在不同的领域中灵活运用。本专题为大家提供python相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.11

2503

5

前端如何实现即时通讯
前端如何实现即时通讯

实现即时通讯的方法有WebSocket、Long Polling、Server-Sent Events、WebRTC等等。详细介绍:1、WebSocket,它可以在客户端和服务器之间建立持久连接,实现实时的双向通信,前端可以使用 WebSocket API来创建WebSocket连接,并通过发送和接收消息来实现即时通讯;2、Long Polling,是一种模拟实时通信的技术等等。

2023.10.09

5423

6

前端和后端的区别
前端和后端的区别

前端关注的是用户界面的设计和交互,而后端则注重数据处理和逻辑控制。想了解更多前端后端的相关内容,可以阅读本专题下面的文章。

2024.03.19

6450

13

php和前端的关联介绍
php和前端的关联介绍

php既可以作为前端语言,也可以作为后端语言。想了解更多php和前端的相关内容,可以阅读本专题下面的文章。

2024.03.22

6078

10

前端外包工作内容有哪些
前端外包工作内容有哪些

前端外包工作内容包括:1. 网站和应用程序开发;2. 用户界面和交互设计;3. 用户体验优化;4. 设计和视觉开发;5. 跨浏览器兼容性;6. 性能优化;7. 维护和更新;8. 项目管理和沟通。想了解更多前端的相关内容,可以阅读本专题下面的文章。

2024.05.22

863

5

python打包成可执行文件
python打包成可执行文件

本专题为大家带来python打包成可执行文件相关的文章,大家可以免费的下载体验。

2023.07.20

1751

4

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Uvicorn官方安装与入门手册
Uvicorn官方安装与入门手册

共0课时 | 0人学习

Python uv官方项目管理指南
Python uv官方项目管理指南

共0课时 | 0人学习

Python uv官方安装与入门文档
Python uv官方安装与入门文档

共0课时 | 0人学习