【问题标题】:DocumentDb User Data SegregationDocumentDb 用户数据隔离
【发布时间】:2014-09-04 10:19:36
【问题描述】:

我正在测试最近发布的 DocumentDb,但找不到任何说明如何执行用户数据隔离的最佳实践的文档。

我想粗略的设计是:

  • 验证用户并创建新的/获取现有的用户 ID
  • 在文档插入时将用户 ID 注入到文档中
  • 在读取文档/收集文档时查询文档用户 ID = 当前用户 ID

我正在创建一个 AngularJs 应用程序,目前使用结合 Azure 移动服务的 Azure Sql 数据库。

移动服务通过使用数据脚本 javascript 函数处理用户身份验证以及服务器端用户数据隔离:

例如

function insert(item, user, request) {
  item.userId = user.userId;
  request.execute();
}

关于使用 DocumentDB 将用户数据与 AngularJS 安全隔离的技术有什么建议吗?

【问题讨论】:

  • 所以一分钱就花在了应该如何实现上。 Azure 移动服务使用 Express 为 Sql 提供内置 API 和自定义 Api 功能。因此,显而易见的路径是使用 js 编写一个自定义 api,该 api 使用 Express 在 Azure 身份验证用户的凭据下访问 DocumentDB。当我有一些有效的来源时,我会回答我自己的问题并在这里发布。

标签: angularjs azure azure-mobile-services azure-cosmosdb


【解决方案1】:

您的方法对我来说听起来很合理 - 假设您粗略设计中提到的逻辑发生在您的后端服务中。

一般来说,我会像对待任何其他数据存储一样对待 DocumentDB。您的客户端 (AngularJS) 调用您的后端服务,而不是直接调用您的数据存储。在将任何工作委派给您的数据存储之前,您的后端会验证客户端的请求(即断言用户已通过身份验证并且可能会接触特定的数据)。

如果需要从客户端直接访问数据库 - 您可以查看 DocumentDB 的用户和权限。为了为您的应用程序实现多租户,您可以在 DocumentDB 中创建与您的实际用户或应用程序租户相对应的用户。然后,您可以为给定用户创建权限,这些权限对应于对各种集合、文档、附件等的访问控制。在您的客户端上,您可以使用用户的资源密钥而不是 DocumetnDB 的管理员密钥连接到数据库。

查看有关 DocumentDB 用户/权限的博文:http://blogs.msdn.com/b/cloud_solution_architect/archive/2014/12/09/permissions-in-azure-documentdb.aspx

【讨论】:

  • 您好,感谢您的回复。是的,这是我正在寻找的缺少的后端服务位。使用移动服务,您可以在 Sql 表上免费获得这些内容。如果微软提供内置操作,也许现在在移动服务中创建自定义 api 端点然后转换它们是合适的。
  • 你知道...我很高兴看到 Azure 移动服务中添加了对 DocumentDB 的支持!您可以在 Azure 移动服务反馈论坛中投票支持 DocumentDB:feedback.azure.com/forums/216254-mobile-services/suggestions/…
猜你喜欢
  • 2021-09-03
  • 1970-01-01
  • 2015-07-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多