数据和安全
几乎每一位使用云服务的开发者都会问,如何能够保证自己应用数据的安全?对安全的关注说明你也是位对产品负责、对用户负责、对自己负责、做事态度认真的开发者,这也正是我们所信守的价值观。
云服务所有的 API 请求都通过 SSL 加密传输,保证传输过程中的数据安全性和可靠性。 云端对客户端发过来的每一个请求,都进行了身份鉴别(Authentication)和访问授权(Authorization)的严格检查。
身份鉴别(Authentication)
访问云服务 API 需要提供应用的 ClientID 和 ClientToken (用于在客户端发起请求),或是 ClientID 和 MasterKey(用于在云引擎、开发者自己的服务器等受信任的环境发起请求)。 Android SDK 还额外支持仅使用 ClientID 访问云服务 API.
使用 MasterKey 访问云服务 API 会跳过所有的访问权限控制,所以请确保 MasterKey 不会泄露。
在客户端使用 ClientToken 访问云服务 API 时:
- 客户端访问 API 通过 HTTPS 加密通讯。
- 通过 SDK 访问 API 时,HTTP Header 中不直接传输 ClientToken ,而是传输客户端根据 ClientToken 和请求发起时间生成的签名字符串,供云端校验。开发者不通过 SDK,直接请求 REST API 时,也可以使用这种更安全的鉴权方式。
通过 HTTPS 加密通讯,不仅保护了数据安全,而且能避免 ClientToken 被第三方窃取,但无法阻止别有用心的人通过在客户端使用抓包工具获取 ClientToken 。 通过签名字符串可以避免在网络传输过程中泄露 ClientToken ,但是无法阻止别有用心的人通过反编译等手段获取代码中初始化 SDK 时设定的 ClientToken 。 Android SDK 提供仅使用 ClientID 的初始化方式,SDK 通过闭源的 native library 根据开发者配置的应用签名证书自动对请求进行签名。 这在一定程度上避免了暴露应用核心配置信息,也显著增加了破解的难度(反编译 native library 后仍需破解加密算法),但仍无法保证绝对的数据安全。 因此,凡是需要在客户端访问的应用,都需要设定 ACL 等权限设置,以保障应用数据的安全性。
访问授权(Authorization)
云服务支持在 Class(表)、字段(列)、对象三个不同的层次设置访问权限。
Class 权限
Class 权限指整个 Class(整张表)的读写权限,需要在控制台进行设置。
在创建 Class 对话框可以设置 Class 的访问权限:

add_fields- 给 Class 增加新的字段,也就是说,保存对象时,如果对应的字段(列)不存在,是否允许自动创建新的字段。如果已经在控制台创建好 Class 的所有字段,最好对任意用户都关闭此权限,防止脏数据写入。create- 在 Class 表中插入一个新对象。对于需要登录用户或者拥有指定授权的用户才能创建内容的场景,可以考虑根据情况设置此权限。delete- 删除既有对象。update- 修改既有对象。find- 通过指定条件查询对象。关闭此权限时,无法查询对象,只能通过 objectId 获取对象(如果没有同时关闭get权限),一定程度上可以防范别有用心的人批量抓取该 Class 下的所有对象。get- 通过 objectId 获取单个对象。
对于每一种权限,又可以开放给不同用户:
- 所有用户 - 相当于 public 权限。这里的「用户」泛指「客户端」,而不是云服务内建账户系统的用户。也就是说,无论请求是否携带 sessionToken,携带的 sessionToken 是否有效,都可以进行这一操作。
- 登录用户 - 只有使用云服务内建账户系统(
_User表)并且进行了登录的客户端(携带了有效 sessionToken 的请求),才可以执行这一操作。 - 指定用户 - 指定用户才可以执行这一操作。支持通过用户名、用户的 objectId、角色名、角色的 objectId 指定用户。如果留空,那么意味着所有用户都没有权限。
譬如我们有一个匿名发帖的应用,所有人都可以发表帖子,但是只有经过管理员审核后的帖子才能被展示出来。我们可以有两张表,第一张表用来存放审核前的帖子,这张表的 create 权限就可以开放给所有用户;第二张表用来存放审核后的帖子,这张表的 create 权限就只开放给管理员。
另外,你也可以修改现有 Class 的访问权限。 进入**Developer Center > Your game > Game Services > Cloud Services > Data Storage > 结构化数据**,选择一个 Class,再点击权限标签页。