我计划构建一个office扩展应用程序(或多或少是一个html5应用程序)。应用程序最有价值的部分是应用程序提供的内容,因此内容信息必须安全地保存在数据库中。任何试图访问内容的人都必须通过显示用户名和密码来证明自己的身份。
我有一个名为“_users”的cloudant数据库,它存储所有用户的登录信息,如用户名和密码,还有一个名为“_contents”的cloudant数据库,它存储所有内容信息。
当用户试图使用他们的web浏览器访问“\u content”数据库时,应用程序将要求用户登录。成功将此用户的凭据与“\u user s”数据库中的数据匹配后,此用户便可以访问“\u content”数据库。
最理想的情况是,登录和授权过程只能使用web浏览器和cloudant数据库来完成。我不希望中间有任何“中间人”(例如运行nodejs的web服务器)。我怎么能这么做。
好吧,这里有些问题我解决不了。
当用户试图与cloudant数据库建立连接时,必须提供api密钥。好的,我可以生成一个允许读取“用户”数据库的API密钥,并将此API密钥给用户。用户可以使用此密钥连接到“用户”,但这是否意味着使用此API密钥,任何用户都可以读取“用户”数据库中的所有数据?这将是一场灾难。
如果上述问题能够解决,如何进行授权?我应该继续为每个用户生成api并在以后删除它们吗?我应该在什么时候执行删除操作?
最佳答案
通常,cloudant不支持自定义用户名和密码,_users
数据库特性。相反,cloudant允许您创建api键,它们是随机字符串。
我认为,考虑到你的要求,上述系统将不起作用。但有好消息!cloudant还支持开源apache couchdb_users
数据库。我认为这对你有用;但是,你需要一点工作来建立它。此解决方案要求您的web服务器做一些cloudant准备工作;但是,当用户使用应用程序时,他们可以直接向cloudant进行身份验证,并且他们可以直接读取和更新文档,而不需要中间服务器。
启用名称验证
参见Cloudant developer FAQ的最后一个问题,“我可以使用couchdb安全功能吗…”
基本上,对于每个db,您希望将
{ "couchdb_auth_only": true,
"members": {
"names": ["user_name_1", "user_name_2", "etc."],
"roles": []
}
}
设置用户帐户
这是根据apache couchdb文档工作的。基本上,您需要使用用户名和散列密码在
/the_db/_security
中创建一个文档。注意,cloudant还没有更新的couchdb特性,服务器将自动为您散列密码:Cloudant auth: lacks _users database如答案所示,请参阅关于散列密码的CouchDB Wiki security page。您需要找到javascript sha1实现,例如CryptoJS
cors公司
您可能需要启用cors,这在cloudant文档中也有描述,即CORS chapter
有了以上所有功能,您可以创建用户(或通过更新
_users
文档来更改其密码;这些用户可以使用基本或cookie身份验证登录以访问其数据库。关于javascript - 如何直接从Web浏览器安全地执行对Cloudant的授权,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34890304/