需求场景

管理员用户在后台上传视频文件,文件比较大,需要直接上传到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