如何直接从Web浏览器安全地执行cloudant授权

时间:2016-01-20 02:05:17

标签: javascript node.js database authorization cloudant

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

我有一个名为&#34的Cloudant数据库; _users"它存储所有用户的登录信息,例如用户名和密码,以及另一个名为" _contents"的Cloudant数据库。它存储所有内容信息。

当用户试图访问" _content"数据库与他们的网络浏览器,应用程序将要求用户登录。成功将此用户的凭据与" _users"中的数据匹配后数据库,此用户可以访问" _content"数据库中。

对我来说理想的情况是,登录和授权过程只能使用Web浏览器和Cloudant数据库完成。我不想让任何中间人(例如,运行nodejs的网络服务器)介于两者之间。我怎么能这样做。

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

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

1 个答案:

答案 0 :(得分: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身份验证登录,以访问其数据库。