以保护数据安全和考虑架构合理性为出发点,我们对基于服务如何进行开发提供了一些设计和编码建议。希望开发者在使用服务之前详细阅读这些建议,并尽可能的符合这些原则,以免造成不必要的时间浪费和带来数据安全风险。

从该结构图,我们可以看到以下几个关键组件:

  • 服务是以方式提供非结构化资源存储服务。向业务服务器提供资源管理服务,向客户端提供资源上传和下载服务。

  • 业务服务器

    业务服务器需要开发者自行管理和维护,并且至少提供如下几个基本功能:

    • 生成各种安全凭证(参考安全机制),安全凭证的创建不能在客户端进行,否则会产生极大的安全风险。
    • 使用关系型数据库(例如MySQL)管理用户帐号信息。最终用户信息的管理并非服务的功能范畴。云存储服务只管理企业账号。
    • 使用数据库管理资源元数据和资源之间的关联关系。
    • 响应客户端的业务请求,执行业务流程并返回执行结果。
  • 客户端

    客户端通常同时是资源的生产方和消费方。客户端在展示内容时,通常需要先从业务服务器获取资源的元信息,并得到必要的下载凭证,然后使用下载凭证从服务获取待展示的资源内容,从而实现一个完整的内容展示过程。

服务器获取一个有效的上传凭证,因此需要先后和两个服务端打交道。

如果有设置回调,则上传完成时会自动发起回调到指定的业务服务器

  • 下载

    公开资源不需要对应的下载凭证,客户端可以直接从

    按照实际的使用场景,客户端对于内容的展示非常类似一个动态网页的生成过程,因此无论该页面内容是公开还是私有,均需要从业务服务器获取展示该页面的动态布局信息。所以通常显示过程也是需要先后和业务服务器服务打交道。

  • 资源管理

    为了防止安全漏洞,资源管理操作应该只在业务服务器端进行。如果允许客户端进行资源管理,即使将管理凭证的生成动作放到业务服务器端进行,仍然很容易被第三方截获请求全文,从而导致重放攻击的风险。

  • 服务器组件。

  • 无论如何,均不得包含在客户端的分发包中(如二进制代码、配置文件或网页中)。
  • SecretKey不得在任何场景中的公网上传输,更不得传输到客户端。
  • 业务服务器端应维持一个用于管理资源元数据的数据库和一个用于管理最终用户账号信息的数据库。
  • 原则上客户端和之间的交互只有上传和下载,不应使用任何其他的API。
  • 点赞(0) 打赏

    评论列表 共有 0 条评论

    暂无评论
    立即
    投稿

    微信公众账号

    微信扫一扫加关注

    发表
    评论
    返回
    顶部