如何直接从 Web 浏览器安全地对 Cloudant 执行授权

how to securely perform authorization to cloudant directly from web browsers

本文关键字:Cloudant 执行 授权 安全 何直接 Web 浏览器      更新时间:2023-09-26

我计划构建一个办公扩展应用程序(或多或少是一个HTML5应用程序)。应用程序最有价值的部分是应用程序提供的内容,因此内容信息必须安全地保存在数据库中。任何试图访问内容的人都必须通过显示其用户名和密码来证明其身份。

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

当用户尝试使用Web浏览器访问"_content"数据库时,应用程序将要求用户登录。成功将此用户的凭据与"_users"数据库中的数据匹配后,该用户将有权访问"_content"数据库。

对我来说,理想的情况是,登录和授权过程只能使用 Web 浏览器和 Cloudant 数据库来完成。我不想在两者之间有任何"中间人"(例如运行nodejs的Web服务器)。我该怎么做。

好的,这里有一些我解决不了的问题。

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

通常,Cloudant 不支持自定义用户名和密码,即_users数据库功能。相反,Cloudant 允许您创建 API 密钥,它们是随机字符串。

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

启用名称身份验证

请参阅 Cloudant 开发人员常见问题解答的最后一个问题"我可以使用 CouchDB 安全功能吗..."

基本上,对于每个数据库,您希望 PUT 到/the_db/_security

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

设置用户帐户

这根据 Apache CouchDB 文档工作。基本上,您需要使用用户名和散列密码在_users创建一个文档。请注意,Cloudant 还没有更新的 CouchDB 功能,服务器将自动为您散列密码: Cloudant 身份验证:缺少_users数据库

因此,正如答案所说,请参阅CouchDB Wiki安全页面有关散列密码的信息。你需要找到一个JavaScript SHA1实现,比如CryptoJS。

科尔斯

您可能需要启用 CORS,Cloudant 文档的 CORS 章节中也对此进行了描述。

完成上述所有操作后,您可以创建用户(或通过更新/_users/*文档来更改其密码;这些用户可以使用基本或cookie身份验证登录以访问其数据库。