目录
一、基础定义
二、四种企业常用方案对比
三、Mermaid 时序图
下载预览:预签名URL
上传:STS前端直传(互联网项目标配)
备选上传:后端接收文件再上传OSS(敏感文件)
备选读取:后端代理转发(高敏感文件)
四、核心重点 & 工程风险点
五、常见误区澄清
一、基础定义
OSS(对象存储服务):以对象(Object)为单位存储二进制文件(图片、PDF、视频、Excel、压缩包等),不存储结构化业务数据(用户信息、订单等放数据库)。
- Object:文件本体 +
objectKey(文件在OSS内唯一路径标识) - 配套设计:数据库只保存文件元数据(objectKey、文件名、上传人、大小等);OSS只保存实体文件。
核心安全原则:永久AccessKey(AK)只存放后端,前端永远不能持有永久AK。
二、四种企业常用方案对比
方案 | 读写角色 | 流量路径 | 适用场景 | 优缺点 |
预签名URL(下载预览,你们当前方案) | 后端鉴权+生成签名;前端拉取文件 | 前端 → OSS | 图片预览、附件下载 | 不占用后端带宽;单文件粒度授权;链接泄露后有效期内可访问 |
STS前端直传(上传主流) | 前端拿临时凭证,前端上传文件 | 前端 → OSS | 用户头像、普通附件上传 | 大文件上传不压后端;后端无法在上传前校验文件内容 |
后端接收文件再上传OSS | 前端传文件给后端,后端上传OSS | 前端→后端→OSS | 敏感文档、后台批量导入、需要前置文件校验 | 文件可提前校验、杀毒;占用后端带宽,大文件易瓶颈 |
后端代理转发读取 | 前端请求后端,后端拉取OSS文件流返回前端 | 前端→后端→OSS | 高度涉密文件,内部小系统 | 完全隐藏OSS地址;后端带宽压力大 |
行业最通用组合:上传使用STS前端直传;下载预览使用预签名URL
三、Mermaid 时序图
下载预览:预签名URL
上传:STS前端直传(互联网项目标配)
备选上传:后端接收文件再上传OSS(敏感文件)
备选读取:后端代理转发(高敏感文件)
四、核心重点 & 工程风险点
- 鉴权逻辑必须写在后端OSS本身不认识业务系统用户角色;不能只依赖OSS签名做权限控制。必须由后端校验用户和文件的权限关系,鉴权通过才生成签名。
- objectKey 存储规范 数据库持久化字段只存原始objectKey,不要持久化预签名URL;预签名URL是动态生成、带时效的临时地址。
- 密钥安全
永久AK只放在后端配置中心/环境变量,禁止硬编码、禁止给到前端;
RAM子账号最小权限原则:只授予对应Bucket的必要读写权限,不要使用root账号AK。
- 时效控制
预签名URL:预览下载一般设置 5~30分钟有效期;不要设置长时间有效期;
STS临时凭证:按需设置有效期,限制可上传的OSS目录前缀,缩小权限范围。
- 可选加固方案 OSS防盗链(Referer白名单)、CDN加速访问、上传后异步内容审核。
五、常见误区澄清
- objectKey = 完整访问URL objectKey只是OSS内文件路径字符串;URL(带签名)每次访问实时生成。
- 前端自己拼接预签名URL 签名计算依赖永久AK,只能后端SDK生成。
- OSS自带业务权限系统 OSS只识别RAM权限、签名;业务权限(A用户能不能看B的文件)完全由业务后端实现。