【发布时间】:2012-03-18 11:48:48
【问题描述】:
背景研究:
User Signup in Couchapp/CouchDB through jquery.couch.js or Otherwise
https://issues.apache.org/jira/browse/COUCHDB-1175 - 特别是“Ari Najarian”的帖子
问题:
解释一下我在上面发布的 SO 问题:
“基本上我想要一个注册表单,用于在 couchdb 中为 couchapp 注册一个帐户。这将需要在 couchdb _users 数据库中创建一个新用户,并创建一个新数据库,新用户分配数据库管理员的角色。所有这些都需要服务器管理员凭据。"
上一个问题的答案涉及使用以管理员身份登录到 couchdb 的外部单独服务器来监控 couchdb 并根据需要修改 couchdb 以响应来自客户端的某些数据事件。
我的问题是 - 这是唯一的方法吗?这不是破坏了 couchdb 的 2 层网络堆栈的全部目的吗?有没有办法从验证函数中修改 couchdb 数据库,该函数在“内部”/单独以管理员身份登录时检查“type == user”文档?
如果有一些直接的方法可以做到这一点,我很抱歉,我只是没有找到正确的文档。
额外问题说明:
- 有一个 couchdb 实例位于一个 Internet 地址。
- 此沙发数据库为随机客户端提供 html 页面和包含注册/登录表单的嵌入式 javascript 脚本。
- 客户输入注册信息(姓名、密码)并提交
- JS 脚本使用 XMLHttpRequest 对象打开到 couchdb 实例的连接并发送...问题!
问题 #1 - 如果凭据存储在代码中(作为新用户数据库的验证发送),那么任何人都可以“查看 html 源代码”并接管数据库。
-或-
问题 #2 - 如果没有提供凭据并且请求是匿名发送的,那么将在 _users 数据库中创建一个新用户并发送成功回复消息。但是没有为用户创建新的数据库(并且不能没有管理员凭据),用户可以与之交互以用于特定于应用程序的目的(例如添加/删除数据)。并且 - 从上面的 couchbase 博客链接 - 如果您使用角色/名称来保护您的数据库以防止匿名读者和验证功能以防止匿名写入,那么匿名用户帐户(例如,想要注册数据库空间以使用app) 不能做任何事情,因为出于明显的安全原因,匿名用户不能指定他们希望拥有的任何角色。这意味着拥有 -functional- 用户的唯一方法是事先以管理员身份创建用户帐户 + 关联数据库,然后分发这些用户凭据 - 就像私人邀请系统一样,是吗?
重申一下,有没有什么办法,只使用 couchdb 和 couchdb 的身份验证处理程序、设计文档功能、客户端 ajax 等的某种组合,让连接的客户端注册并获取个人数据库(并且显然只使用该数据库) 他们可以访问并与之交互?
【问题讨论】:
-
我在我的问题的“背景研究”部分列出了该问题(因此现在链接了 2 个问题)。我创建这篇文章是因为关于另一个问题的建议解决方案涉及向 couchdb 层添加另一个迷你层,我想知道是否有一个“纯”couchdb 解决方案。我会发布到上面的链接,但我不想劫持别人的问题。
-
这个问题肯定是相关的。我想要一个纯粹且安全、仅限 couchdb 的解决方案
-
@gregm - 感谢您的建议。我之前访问过该链接,据我了解,这只是在 couchdb 实例的 _users 数据库中创建一个用户帐户,而不是该用户管理的关联数据库。来自链接:“” * 用户通过 BrowserID 而不是密码登录 * 用户第一次登录时,CouchDB 将为他们创建一个帐户。 "" 所以它看起来像是匿名用户在数据库中创建非功能帐户的过程的包装器。
标签: authentication couchdb couchapp