快速搭建移动应用上传回调服务
背景信息
快速搭建移动应用直传服务介绍了如何快速搭建一个基于OSS的移动应用数据直传服务。但该方案有个问题:对于Android/iOS移动应用来说,只需要申请一次STS凭证,就能多次使用该STS凭证上传数据到OSS。这就导致应用服务器无法得知用户上传了哪些数据 ,作为该App的开发者,就无法对应用上传数据进行管理。为此OSS提供了上传回调方案。
上传回调的开发流程如下: OSS在收到Android/iOS移动应用的数据(上图中步骤5)和在返回用户上传结果(上图中步骤7)之间,触发一个上传回调任务,即第上图中步骤6,通过回调用户服务器获取应用服务器返回的内容,然后将此内容返回给Android/iOS移动应用。详情请参见Callback API文档。 要让OSS在接收上传请求时触发上传回调,移动应用在构造上传请求时必须把如下内容指定到上传请求里面: 假如您的用户服务器上传回调地址是 上传回调示例分以下两种: 根据设定的不同URL和回调内容,应用服务器收到的回调请求会有所不同,示例如下: 更多内容请参见Callback API文档。 如果您的回调服务器被人恶意攻击了,例如恶意回调您的应用服务器,导致应用服务器收到一些非法的请求,影响正常逻辑,此时您就需要判断回调请求是否来自OSS。 判断的方法主要是根据OSS给应用服务器返回的头部内容中 应用服务器在校验这个请求是来自OSS后,指定回调给应用服务器的内容格式,如 应用服务器就可以根据OSS的返回内容,解析得到自己想要的数据。得到这个数据后,应用服务器可以把数据存放起来,方便后续管理。 有两种情况: 示例程序只是完成了如何检查应用服务器收到的签名, 您需要自行增加对应用服务器收到回调内容的格式解析 。 不可以篡改成其他地址,因为参数会被签名被OSS服务端验证,而篡改的内容无法通过验证。流程介绍
上传回调的作用
返回的基本信息可以包含下表中一个或多个变量,返回内容的格式在Android/iOS上传时指定。
假如您是一个开发者,您想知道当前用户所使用的App版本、当前用户所在的操作系统版本、用户的GPS信息、用户的手机型号。您可以在Android/iOS端上传文件时,指定以下自定义参数:
Android/iOS移动应用上传文件到OSS时附带上述参数,然后OSS把这些参数放到CallbackBody里发给应用服务器。这样应用服务器就能收到这些信息,达到信息传递的目的。上传回调对应用服务器的要求
http://example.com/callback.php。在移动应用端设置上传回调
http://example.com/callback.php,这个地址必须是公网能够访问的。http://example.com/callback.php。您想获取手机上传的文件名称、文件的大小,并且定义了x:phone变量是指手机型号,x:system变量是指操作系统版本。应用服务器收到的回调请求
POST /index.html HTTP/1.0
Host: 203.0.113.0
Connection: close
Content-Length: 81
Content-Type: application/x-www-form-urlencoded
User-Agent: ehttp-client/0.0.1
authorization: kKQe**************/kdD1ktNVgbWE**************
x-oss-pub-key-url: aHR0**************
filename=test.txt&size=5&phone=iphone6s&system=ios9.1
应用服务器判断回调请求是否来自OSS
x-oss-pub-key-url和authorization这两个参数进行RSA校验。只有通过RSA校验才能说明这个请求是来自OSS。本文提供的示例程序有实现的示例供您参考。应用服务器收到回调请求后的处理
filename=test.txt&size=5&phone=iphone6s&system=ios9.1
OSS如何处理应用服务器的返回内容
示例程序下载
常见问题
callback地址是否可以篡改成其他地址,由其他服务器接收回调并确认上传成功与否?

