需求场景
- 管理员用户在后台上传视频文件,文件比较大,需要直接上传到OSS上面。
- 出于安全考虑,不能直接把一个RAM用户的key和secret写死在管理后台的前端代码里面,所以需要使用阿里云的STS获取一个临时的身份,用来上传文件,文件传完之后身份过期。
概念介绍
这个过程,会涉及到阿里云的两个云服务:
- STS
- 访问控制
STS:阿里云临时安全令牌(Security Token Service,STS)是阿里云提供的一种临时访问权限管理服务。
访问控制:阿里云的访问控制服务,其实就是提供了”用户-角色-权限“这样的一套用户权限体系,用来控制对于阿里云各类云资源的访问,比如OSS等。其中有几个关键概念:
- 可信实体:可信实体,可以简单理解为一个用户,这个用户可以在“阿里云控制台->访问控制->人员管理->用户”里面去进行创建和编辑。
- RAM角色:角色可以理解为是一组权限的集合。
- 扮演角色:一个用户可以扮演一个或者多个角色,扮演哪个角色,就拥有了哪个角色赋予的权限。
ARN:是一个字符串,用来在代码中唯一标识一个角色。
实现逻辑
上述业务场景的实现,本质上就是:
- 就是我们使用某一个用户(可信实体)的身份,来向阿里云的STS服务,请求一套临时的访问令牌,让这个令牌的持有者,可以临时扮演指定的一个角色
- 前端获得这个临时令牌之后,以其调用OSS提供的接口,来进行OSS的文件操作。
简单来说,分成两个步骤:
- 在阿里云的访问控制后台,创建好用户和RAM角色
- 业务服务器实现一个获取STS令牌的接口,供前端调用。
- 前端使用STS访问令牌,访问OSS提供的上传文件接口。
从业务服务器的角度,需要做的工作包括:
- 创建授权策略
- 创建RAM角色
- 创建用户
- 实现提供STS访问令牌的接口
- 跨域设置
上述业务场景的实现,本质上,
就是我们使用某一个用户(可信实体)的身份,来向阿里云的STS服务,请求一套临时的访问令牌,让这个令牌的持有者,可以临时扮演指定的一个角色
前端获得这个临时令牌之后,以其调用OSS提供的接口,来进行OSS的文件操作。
前端调用
对于前端调用者而言,在获取到令牌之后,主要问题就是怎样来上传一个文件,详见下面的链接。
推荐使用Browser.js的方式,有三个主要的接口可供前端使用:
- 普通上传
- 分片上传
- 断点续传
参考资料
关于STS的一些基本概念:https://help.aliyun.com/document_detail/28756.html?spm=a2c4g.11174283.6.787.4a4d5662tWHP35
前端怎样上传文件:https://help.aliyun.com/document_detail/112718.html?spm=a2c4g.11174359.6.1552.3da85241mGWBs8