如何直接从 Web 浏览器安全地执行对 cloudant 的授权
how to securely perform authorization to cloudant directly from web browsers
我打算构建一个办公扩展应用程序(或多或少是一个 HTML5 应用程序)。应用程序最有价值的部分是应用程序提供的内容,因此内容信息必须安全地保存在数据库中。任何试图访问内容的人都必须出示用户名和密码来证明自己的身份。
我有一个名为“_users”的 Cloudant 数据库,它存储所有用户登录信息,例如用户名和密码,还有另一个名为“_contents”的 Cloudant 数据库,它存储所有内容信息。
当用户尝试使用他们的网络浏览器访问“_content”数据库时,应用程序将要求用户登录。将此用户的凭据与“_users”数据库中的数据成功匹配后,此用户便可以访问“_content”数据库。
我的理想情况是,登录和授权过程可以仅使用 Web 浏览器和 Cloudant 数据库完成。我不想在两者之间有任何 "middle person"(例如网络服务器 运行 nodejs)。我该怎么做。
好的,这里有一些我无法解决的问题。
- 当用户尝试与 Cloudant 数据库建立连接时,必须提供 API 密钥。好的,我可以生成一个允许读取“_users”数据库的 API 密钥,并将此 API 密钥提供给 user.a 用户可以使用此密钥连接到“_users”,但是这是否意味着使用此 API 键,任何用户都可以读取“_users”数据库中的所有数据?这将是一场灾难。
- 如果可以解决以上问题,如何进行授权?我应该继续为每个用户生成 APIs 并在以后删除它们吗?我应该在什么时候执行删除操作?
通常,Cloudant 不支持自定义用户名和密码,_users
数据库功能。相反,Cloudant 允许您创建 API 键,它们是随机字符串。
我认为,根据您的要求,上述系统将无法运行。但有个好消息! Cloudant 还支持开源 Apache CouchDB _users
数据库。我认为这对你有用;但是,您需要做一些工作来设置它。该解决方案需要您的 Web 服务器做一些 Cloudant 准备工作;然而,当用户使用该应用程序时,他们可以直接向 Cloudant 进行身份验证,并且可以直接读取和更新文档,不需要中间服务器。
启用姓名认证
见Cloudant developer FAQ的最后一题,"Can I use CouchDB security features..."
基本上,对于每个 DB,您想 PUT 到 /the_db/_security
{ "couchdb_auth_only": true,
"members": {
"names": ["user_name_1", "user_name_2", "etc."],
"roles": []
}
}
设置用户帐户
这根据 Apache CouchDB 文档工作。基本上,您需要使用用户名和散列密码在 _users
中创建一个文档。 注意,Cloudant 还没有较新的 CouchDB 功能,服务器会自动为您散列密码:Cloudant auth: lacks _users database
正如答案所说,请参阅 CouchDB Wiki security page about hashing passwords. You will need to find a JavaScript SHA1 implementation, such as CryptoJS
CORS
您可能需要启用 CORS,Cloudant 文档中也对此进行了描述,CORS chapter
完成上述所有操作后,您可以创建用户(或通过更新 /_users/*
文档更改密码;这些用户可以使用基本身份验证或 cookie 身份验证登录,以访问其数据库。
我打算构建一个办公扩展应用程序(或多或少是一个 HTML5 应用程序)。应用程序最有价值的部分是应用程序提供的内容,因此内容信息必须安全地保存在数据库中。任何试图访问内容的人都必须出示用户名和密码来证明自己的身份。
我有一个名为“_users”的 Cloudant 数据库,它存储所有用户登录信息,例如用户名和密码,还有另一个名为“_contents”的 Cloudant 数据库,它存储所有内容信息。
当用户尝试使用他们的网络浏览器访问“_content”数据库时,应用程序将要求用户登录。将此用户的凭据与“_users”数据库中的数据成功匹配后,此用户便可以访问“_content”数据库。
我的理想情况是,登录和授权过程可以仅使用 Web 浏览器和 Cloudant 数据库完成。我不想在两者之间有任何 "middle person"(例如网络服务器 运行 nodejs)。我该怎么做。
好的,这里有一些我无法解决的问题。
- 当用户尝试与 Cloudant 数据库建立连接时,必须提供 API 密钥。好的,我可以生成一个允许读取“_users”数据库的 API 密钥,并将此 API 密钥提供给 user.a 用户可以使用此密钥连接到“_users”,但是这是否意味着使用此 API 键,任何用户都可以读取“_users”数据库中的所有数据?这将是一场灾难。
- 如果可以解决以上问题,如何进行授权?我应该继续为每个用户生成 APIs 并在以后删除它们吗?我应该在什么时候执行删除操作?
通常,Cloudant 不支持自定义用户名和密码,_users
数据库功能。相反,Cloudant 允许您创建 API 键,它们是随机字符串。
我认为,根据您的要求,上述系统将无法运行。但有个好消息! Cloudant 还支持开源 Apache CouchDB _users
数据库。我认为这对你有用;但是,您需要做一些工作来设置它。该解决方案需要您的 Web 服务器做一些 Cloudant 准备工作;然而,当用户使用该应用程序时,他们可以直接向 Cloudant 进行身份验证,并且可以直接读取和更新文档,不需要中间服务器。
启用姓名认证
见Cloudant developer FAQ的最后一题,"Can I use CouchDB security features..."
基本上,对于每个 DB,您想 PUT 到 /the_db/_security
{ "couchdb_auth_only": true,
"members": {
"names": ["user_name_1", "user_name_2", "etc."],
"roles": []
}
}
设置用户帐户
这根据 Apache CouchDB 文档工作。基本上,您需要使用用户名和散列密码在 _users
中创建一个文档。 注意,Cloudant 还没有较新的 CouchDB 功能,服务器会自动为您散列密码:Cloudant auth: lacks _users database
正如答案所说,请参阅 CouchDB Wiki security page about hashing passwords. You will need to find a JavaScript SHA1 implementation, such as CryptoJS
CORS
您可能需要启用 CORS,Cloudant 文档中也对此进行了描述,CORS chapter
完成上述所有操作后,您可以创建用户(或通过更新 /_users/*
文档更改密码;这些用户可以使用基本身份验证或 cookie 身份验证登录,以访问其数据库。