安全的客户端couchApp / couchDB用户身份验证

时间:2012-02-28 23:43:02

标签: authentication couchdb couchapp

背景研究:

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 - 特别是“Ari Najarian”的帖子

问题:

用上面发布的SO问题来解释:

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

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

我的问题是 - 这是唯一的方法吗?这不是打败了couchdb的2层Web堆栈的全部目的吗?有没有办法从验证函数中修改couchdb数据库,该函数检查“type == user”文档,而“内部”/单独以管理员身份登录?

如果有一些直接的方法可以做到这一点,我很抱歉,我只是找不到合适的文档。

额外问题澄清:

  1. 有一个位于互联网地址的couchdb实例。
  2. 此沙发数据库为随机客户端提供一个html页面和包含注册/登录表单的嵌入式javascript脚本。
  3. 客户输入注册信息(名称,密码)并提交
  4. JS脚本使用XMLHttpRequest对象打开与couchdb实例的连接并发送...问题!
  5. 问题#1 - 如果凭证存储在代码中(作为新用户数据库的验证发送),那么任何人都可以“查看html源”并接管数据库。

    -OR -

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

    重申一下,有没有办法,只使用couchdb和couchdb的身份验证处理程序,设计文档函数,客户端ajax等的一些组合,以便连接客户端注册并获取个人数据库(并且只显示该数据库)他们可以访问并可以与之互动吗?

1 个答案:

答案 0 :(得分:3)

This不是PURE沙发解决方案,但它是沙发+节点,并解决了您的问题:

嗨,我有一段时间没有出现过,并没有意识到这被删除了编辑/链接(加上链接的政策没有答案!抱歉......)。我一直在一个非常类似于你想要做的项目上使用couchdb,不幸的是,没有办法完成你想要完成的任何事情,而没有处理另一个服务来处理管理级访问和创建用户数据库。 Syncpoint-API 可以用于促进这一点,但它实际上是一个处理注册/登录和专用数据库设置的nodejs服务。

到目前为止,Syncpoint已被证明不是100%可靠,它似乎是一个废弃的项目,因为CouchBase将所有r + d资源从CouchDB dev中吸走。

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

我的结论? CouchDB是一款出色的产品,具有一些出色的功能,但是对于更复杂的登录/授权方案以及真实开发中所需的其他一般应用程序需求,它还没有准备好。