2012-02-28 75 views
5

背景研究:安全客户端couchApp/CouchDB的用户认证

User Signup in Couchapp/CouchDB through jquery.couch.js or Otherwise

http://blog.couchbase.com/what%E2%80%99s-new-couchdb-10-%E2%80%94-part-4-security%E2%80%99n-stuff-users-authentication-authorisation-and-permissions

https://issues.apache.org/jira/browse/COUCHDB-1175 - 特别是 “阿里纳贾瑞恩” 的帖子

问题:

解释我上面发布的SO问题:

“基本上我想要在couchdb中注册一个帐户来注册couchapp帐户。这将需要在couchdb _users数据库中创建一个新用户,并创建一个新数据库,新用户分配了数据库管理员角色。所有这些都需要服务器管理员凭据。“

上一个问题的答案涉及使用已作为管理员登录到couchdb的外部单独服务器来监视couchdb并根据需要修改couchdb以响应来自客户端的某些数据事件

我的问题是 - 这是唯一的方法吗?是不是没有达到couchdb的2层web栈的全部目的?是否有某种方法可以从验证函数中修改couchdb数据库,以检查“类型==用户“文件,而”内部“/分别登录作为管理员可能?

我道歉,如果有一些直接的方式来做到这一点,我只是没有'找到正确的文档。

额外的问题澄清:

  1. 还有就是CouchDB实例坐在一个Internet地址。
  2. 这个沙发数据库服务于一个随机客户端的HTML页面和嵌入式JavaScript脚本,其中包含注册/登录表单。
  3. 客户端输入注册信息(名称,密码)并提交
  4. JS脚本使用XMLHttpRequest对象打开到couchdb实例的连接并发送... PROBLEM!

问题1 - 如果证书存储在代码中(要作为新用户数据库的验证发送),那么任何人都可以“查看html源代码”并接管数据库。

-OR-

问题#2 - 如果未提供证书和请求匿名发送,则新的用户会在_users数据库中创建和成功应答消息将被发送。但是没有为用户创建新的数据库(并且不能没有管理员凭证),用户可以为了特定应用目的(例如添加/删除数据)而与之交互。并且 - 从上面的couchbase博客链接 - 如果您已经使用匿名读取器和验证函数为角色/名称保护数据库以防止匿名写入,那么使用匿名用户帐户(例如,希望注册数据库空间以使用应用程序)不能做任何事情,因为匿名用户出于明显的安全原因不能指定他们希望拥有的任何角色。这意味着使用功能用户的唯一方法是事先创建用户帐户+关联的数据库,然后分发这些用户凭证 - 就像私人邀请系统一样,是的?

重申,有没有什么办法,只使用couchdb和couchdb的身份验证处理程序,设计文档函数,客户端AJAX等的一些组合来注册和获取个人数据库(并且只有该数据库显然)他们有权访问和可以互动?

+0

[用户注册Couchapp/CouchDB通过jquery.couch.js或其他](http://stackoverflow.com/questions/5305543/user-signup-in-couchapp-couchdb-through-jquery-couch -js-or-otherwise) – 2012-02-29 13:23:12

+0

我在我的问题的“背景研究”部分中列出了这个问题(因此这两个问题现在链接在一起)。我创建了这篇文章,因为另一个问题的建议解决方案涉及在couchdb层添加另一个迷你层,我想知道是否存在针对此问题的“纯粹”couchdb解决方案。我会张贴到上述链接,但我不想劫持别人的问题。 – jigritsn 2012-02-29 16:31:11

+0

这个问题当然是相关的。我想要一个纯粹安全的,只有couchdb的解决方案 – gregm 2012-06-04 18:33:50

回答

3

This不是一个纯粹的沙发上的解决方案,但它是沙发+节点,并解决你的问题:

您好我还没有被周围的一段时间,并没有意识到这是编辑/链接删除(加链接政策不是答案!抱歉...)。我一直在使用couchdb来处理与您正在尝试执行的项目非常相似的项目,但不幸的是,如果不添加其他服务来处理用户数据库的管理级别访问和创建,则无法完成您想要完成的任务。 Syncpoint-API 可以使用来实现这一点,但它实际上是一个处理注册/登录和专用数据库设置的nodejs服务。

迄今为止,Syncpoint已经证明不是100%可靠的,并且由于CouchBase将所有r + d资源从CouchDB开发中剔除,它看起来似乎是一个被遗弃的项目。

我现在转移到nodejs + socket.io作为传输层,使用节点握手并分配数据库,然后进一步观察沙发在服务器上(通过另一个节点进程)_changes api然后转发_通过socket.io更改到客户端。此外,我还有一些“纯粹的”couchapps运行,可以将公共数据与私人数据混合在一起。

我的结论是? CouchDB是一款出色的产品,并且具有一些强大的功能,但对于更复杂的登录/授权方案以及实际开发中所需的其他常规应用程序需求,它尚未准备就绪。

+0

嗨,新用户,并感谢您的答案。请至少发布解决方案的说明;链接本身并不是根据指南的答案(并且它们可能会被删除)。 – 2012-09-28 23:12:36

+0

@kfancy - 不用担心延迟更新,我也没有在几个月内检查过这个问题。 您在couchdb的_changes提要和客户端请求之间使用基于节点的迷你层作为中介的解决方案是另一个堆栈溢出问题。 如果只是因为似乎没有任何迹象表明真正的解决方案(如在couchdb更新中)即将出现,那么我将继续选择您的答案作为“解决方案”。感谢您分享处理此问题的经验。 – jigritsn 2013-02-14 06:03:40

+0

在github上找不到Syncpoint-API仓库 – alecxe 2013-04-19 13:24:43