对象存储服务 OBS-使用预签名URL直传OBS:方案架构
方案架构
应用客户端每个请求都将向应用服务器申请预签名URL,该预签名URL有效期由应用服务器管理。具体流程如图1。
角色分析如下:
- 应用客户端:即最终用户手机上的APP,负责向应用服务器申请包含预签名的URL,以及访问OBS完成数据上传或下载。
- 应用服务器:即提供该Android/iOS应用的开发者开发的APP后台服务,用于管理凭证信息以及发放预签名URL。
- OBS:即华为云对象存储,负责处理移动应用的数据请求。
- 移动应用客户端向应用服务器申请一个预签名的URL。
Android和iOS应用使用OBS服务时,不需要存储访问密钥(AK/SK)。应用在上传前必须向用户的应用服务器申请访问OBS的URL,并携带必须信息,包括请求类型、资源路径和资源名称。比如上传操作需要标识该URL为上传请求,需要包含上传的路径以及上传对象的名称;下载操作需要标识该URL为下载请求,需要包含所下载对象的名称。
- 应用服务器作为可信设备,在应用服务器上存储访问密钥(AK/SK)。应用服务器在验证客户端身份合法之后,使用应用服务器保存的访问密钥(AK/SK)以及客户端访问的资源、操作类型生成预签名URL。举例:
https://examplebucket.obs.cn-north-4.myhuaweicloud.com/objectkey?AccessKeyId=AccessKeyID&Expires=1532779451&Signature=0Akylf43Bm3mD1bh2rM3dmVp1Bo%3D
- Android/iOS移动应用获取此URL,直接使用该URL操作数据,比如上传或者下载操作。
URL中会包含用户的AK、签名、有效期、资源等信息,任何拿到这个URL的人均可执行这个操作。OBS服务收到这个请求并验证签名后,认为该请求就是签发URL的用户自己在执行操作。例如构造一个携带签名信息的下载对象URL,拿到相应URL的人能下载这个对象,但该URL只在Expires指定的失效时间内有效(如果使用临时访问密钥,有效期为临时访问密钥有效时长和Expires的最小值)。URL中携带签名主要用于在不提供给其他人SK的情况下,让其他人能用预签发的URL来进行身份认证,并执行预定义的操作。