【问题标题】:how to securely perform authorization to cloudant directly from web browsers如何直接从 Web 浏览器安全地执行对 cloudant 的授权
【发布时间】:2016-01-20 02:05:17
【问题描述】:

我正计划构建一个办公扩展应用程序(或多或少是一个 HTML5 应用程序)。应用程序最有价值的部分是应用程序提供的内容,因此内容信息必须安全地保存在数据库中。任何试图访问内容的人都必须通过显示他们的用户名和密码来证明他们的身份。

我有一个名为“_users”的 Cloudant 数据库,用于存储所有用户登录信息,例如用户名和密码,还有一个名为“_contents”的 Cloudant 数据库,用于存储所有内容信息。

当用户尝试使用他们的网络浏览器访问“_content”数据库时,应用程序会要求用户登录。在成功将此用户的凭据与“_users”数据库中的数据匹配后,该用户就可以访问“_content”数据库。

对我来说理想的情况是,登录和授权过程可以仅使用 Web 浏览器和 Cloudant 数据库来完成。我不想在两者之间有任何“中间人”(例如运行 nodejs 的 Web 服务器)。我该怎么做。

好的,这里有一些我无法解决的问题。

  1. 当用户尝试与 Cloudant 数据库建立连接时,必须提供 API 密钥。好的,我可以生成一个允许读取“_users”数据库的 API 密钥,并将此 API 密钥提供给用户。用户可以使用此密钥连接到“_users”,但这是否意味着使用此 API 密钥,任何用户可以读取“_users”数据库中的所有数据吗?这将是一场灾难。
  2. 如果可以解决上述问题,如何进行授权?我应该继续为每个用户生成 API 并在以后删除它们吗?我应该在什么时候执行删除操作?

【问题讨论】:

  • 我这是可能的。您能否澄清一些事情,以便我们帮助回答您的问题?办公扩展应用程序是 HTML5,但是它使用 Web 服务器吗?或者它是在 Office 内部运行的某种嵌入式应用程序之类的?
  • 另外,您能否澄清一下:您是否将_users 数据库用于您自己的应用程序?您是否将它与 Apache CouchDB 一起使用?通常,Cloudant 不使用 _users 数据库,所以我想知道您是否正在从 CouchDB 过渡到 Cloudant,或者您是否一直在阅读 CouchDB 文档或类似的东西。再次感谢!
  • @JasonSmith,office 扩展应用程序本质上是由 Microsoft Office Word 嵌入式浏览器打开的 HTML5 网页,这些网页在服务器上提供(我在 bluemix 上选择了 nodejs),所有普通浏览器-->服务器的东西也可以在这里完成。
  • @JasonSmith,我还是 NOSQL 的新手。我从 Bluemix 中找到了 Cloudant NoSQL,因此我正在考虑从 mysql 迁移到 Cloudant。我从未尝试过 CouchDB,但我注意到 Cloudant 与 CouchDB 非常相似,我正在阅读 CouchDB 文档,因为没有详细的 Cloudant 文档。从安全部分,我确实看到了“_user”数据库的“特殊”用法,我正试图找到更多关于它的信息。我希望对用户授权有更多的控制:当他/她选择支付 1 个月时,用户只能访问数据库 1 个月。仍在努力寻找方法
  • 感谢您的反馈!在大多数情况下,Cloudant 与 CouchDB 非常相似。大多数差异是 CouchDB 尚不具备的附加功能。无论如何,我推荐 Cloudant 指南 docs.cloudant.com/index.html,其中包括完整的 API 参考:docs.cloudant.com/api.html

标签: javascript node.js database authorization cloudant


【解决方案1】:

通常,Cloudant 不支持自定义用户名和密码,_users 数据库功能。相反,Cloudant 允许您创建 API 密钥,它们是随机字符串。

我认为,鉴于您的要求,上述系统将无法正常工作。但有一个好消息! Cloudant 也支持开源的 Apache CouchDB _users 数据库。我认为这对你有用;但是,您需要做一些工作来设置它。此解决方案需要您的 Web 服务器做一些 Cloudant 准备;然而,当用户使用应用程序时,他们可以直接向 Cloudant 进行身份验证,并且可以直接读取和更新文档,无需中间服务器。

启用名称验证

查看Cloudant developer FAQ 的最后一个问题,“我可以使用 CouchDB 安全功能...”

基本上,对于每个数据库,您要 PUT 到 /the_db/_security

{ "couchdb_auth_only": true,
  "members": {
    "names": ["user_name_1", "user_name_2", "etc."],
    "roles": []
  }
}

设置用户帐户

这符合 Apache CouchDB 文档。基本上,您需要使用用户名和散列密码在_users 中创建一个文档。 注意,Cloudant 还没有更新的 CouchDB 功能,服务器会自动为您加密密码:Cloudant auth: lacks _users database

正如答案所说,请参阅CouchDB Wiki security page 关于散列密码。您将需要找到一个 JavaScript SHA1 实现,例如 CryptoJS

CORS

您可能需要启用 CORS,这也在 Cloudant 文档CORS chapter中进行了描述

有了以上所有条件,您就可以创建用户(或通过更新/_users/* 文档来更改他们的密码;这些用户可以使用基本身份验证或 cookie 身份验证登录,以访问他们的数据库。

【讨论】:

  • "Cloudant 还没有更新的 CouchDB 功能,服务器会自动为您的密码散列" => 该功能是 2013 年的 V1.2 中的,如何“更新”?跨度>
猜你喜欢
  • 1970-01-01
  • 2010-12-09
  • 1970-01-01
  • 2014-09-22
  • 2010-10-08
  • 2018-04-12
  • 1970-01-01
  • 2016-01-15
  • 1970-01-01
相关资源
最近更新 更多