没有 C#、授权的 Azure DocumentDb,直接使用 Angular

Azure DocumentDb without C#, authorization, and just use straight Angular

我搜索了 Google 和 Whosebug,但无济于事。我是 DocumentDB 的新手,刚刚从我的 SQL 实例导入数据;到目前为止,还不错。

我的文档不需要安全性,我正在寻找 Azure 上的设置(?)绕过 URL 和令牌(来自密钥,即主密钥)中的额外垃圾或一些解决方案保持简单。

简而言之,我希望创建一个纯粹的 AngularJs 解决方案,它不需要额外的身份验证包袱并且很好奇需要做什么。 (我网站上的代理,如 WebApi 对我不起作用,即 Microsoft.Azure.DocumentClass 不需要这种简单的访问。)

没有允许匿名访问 DocumentDB 的设置

既然你是javascript人,我建议你使用Azure的node.js服务(Azure术语中的web应用程序)并建立一个小代理服务。只需进行一些配置,您就可以使用 npm 包 hoxy。还有流行的 json-proxy npm 包。您甚至可以只使用 node-restify 或 express.js 并编写代码来自己进行代理。

使用其中任何一个,您还可以实施一个最小的身份验证系统,这样您就不会 运行 David Makogon 提到的风险。

详细来说,这个想法是您假装直接从浏览器访问 DocumentDB 的 REST API。但是,URL 用于您的代理服务而不是 DocumentDB 端点。从浏览器调用时也不要使用 DocumentDB 身份验证内容,但要添加一些您自己的身份验证。我推荐 Angular 支持的基本身份验证,并且非常容易在您的服务中实现。然后,您的代理确认来自浏览器的身份验证是正确的,并使用您的 DocumentDB 主密钥访问 DocumentDB。您的代理基本上是用您的基本身份验证来代替完整的 DocumentDB 主密钥访问权限。

不要将您的 DocumentDB 主密钥硬编码到您的代理代码中。相反,将它放在您的服务引用 (process.env.DOCUMENT_DB_KEY) 的环境变量中(portal.azure.com 中的配置选项)。

在最简单的形式中,您还可以在环境变量中存储一个有效的用户名和密码。如果您需要多次登录,您可能希望将其存储在 DocumentDB 数据库中。明文密码存储可能适合您,但如果我不建议您使用节点的内置加密 (crypto.pbkdf2) 而不是明文密码来存储加盐哈希,那我就是失职了。您可以针对您的用例跳过它,但您可能应该使用 https 而不是 http。 Azure 支持此功能,但您必须获得自己的证书。

我正在将我当前更复杂的 API DocumentDB 前端转换为 npm 包。准备就绪后,我很乐意与您分享。或者,我不会花很长时间编写您概述的超级简单的代码并将其发布到规范的 npm。