如何直接从网页浏览器安全地执行对云端的授权

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

我有一个名为“_users”的Cloudant数据库,它存储所有的用户login信息,如用户名和密码,另一个名为“_contents”的Cloudant数据库,它存储所有的内容信息。

当用户试图用他们的网页浏览器访问“_content”数据库时,应用程序会要求用户login。 成功地将此用户的凭证与“_users”数据库中的数据匹配后,此用户便可访问“_content”数据库。

理想的情况是,login和授权过程可以只使用Web浏览器和Cloudant数据库来完成。 我不想有任何“中间人”(例如运行nodejs的Web服务器)。 我怎样才能做到这一点。

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

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

通常,Cloudant不支持自定义用户名和密码, _users数据库function。 相反,Cloudant允许您创build随机string的API密钥。

我想,根据你的要求,上面的系统是行不通的。 但是有好消息! Cloudant也支持开源的Apache CouchDB _users数据库。 我认为这会对你有用。 但是,您需要一些工作来设置它。 这个解决scheme需要你的Web服务器做一些Cloudant准备; 但是当用户使用该应用程序时,他们可以直接向Cloudant进行身份validation,并且可以直接读取和更新文档,而不需要中间服务器。

启用名称validation

查看Cloudant开发者常见问题的最后一个问题,“我可以使用CouchDB安全function吗?”

基本上, 对于每个数据库 ,你想要PUT到/the_db/_security

 { "couchdb_auth_only": true, "members": { "names": ["user_name_1", "user_name_2", "etc."], "roles": [] } } 

设置用户帐户

这根据Apache CouchDB文档工作。 基本上,您需要使用用户名和散列密码在_users创build一个文档。 请注意 ,Cloudant还没有新的CouchDBfunction,服务器将自动为您input密码: Cloudant auth:缺less_users数据库

正如答案所述,请参阅关于哈希密码的CouchDB Wiki安全页面 。 您需要find一个JavaScript SHA1实现,比如CryptoJS

CORS

您可能需要启用CORS,这也在Cloudant文档, CORS章节中进行了描述

有了上述所有的东西,你可以创build用户(或通过更新/_users/*文件来更改他们的密码;这些用户可以使用基本身份validation或cookie身份validationlogin,以访问他们的数据库。