我正在 Cloudant 上设置 CouchDB,我很困惑,因为 Cloudant 的身份验证方式似乎与常规 CouchDB 不同。具体来说,Cloudant 似乎缺少_users
数据库。
我在这里阅读了 Cloudant auth FAQ ,它提供了以下说明:
我可以在 Cloudant 上使用 CouchDB 安全功能(_users 数据库、安全对象、验证函数)吗?
是的你可以。如果要使用 _users 数据库,您必须首先关闭 Cloudant 自己的安全性,以便通过 _users 管理角色。为此,您需要将如下所示的 JSON 文档放入数据库的 _security 端点(例如 https://USERNAME.cloudant.com/DATABASE/_security):
{ "cloudant": { "nobody": ["_reader", "_writer", "_admin"] }, "readers": { "names":["demo"],"roles":[] } }
这些说明运行良好,并允许我更新数据库的 _security 对象。
不清楚的是如何设置 _users 数据库。它不是自动存在的,所以我尝试使用常规创建它:
curl -X PUT $COUCH/_users
这很好用,但是当我尝试将新用户添加到 _users 时,如下所示:
curl -HContent-Type:application/json \
-vXPUT $COUCH/_users/org.couchdb.user:me \
--data-binary '{"_id": "org.couchdb.user:me","name": "me","roles": [],"type": "user","password": "pwd"}'
似乎可以正确创建文档:
{"ok":true,"id":"org.couchdb.user:me","rev":"3-86c3801fdb8c32331f5f2580e861a765"}
但是 Cloudant 上 _users 中的新用户缺少散列密码:
{
"_id": "org.couchdb.user:me",
"_rev": "3-86c3801fdb8c32331f5f2580e861a765",
"name": "me",
"roles": [
],
"type": "user",
"password": "pwd"
}
因此,当我尝试对该用户进行身份验证时,出现以下错误:
{"error":"bad_request","reason":"missing password_sha property in user doc"}
在我的本地 CouchDB 安装中,在 _users 中创建新用户将自动创建散列密码:
{
"_id": "org.couchdb.user:test",
"_rev": "1-9c1c4360eba168468a37d7f623782d23",
"password_scheme": "pbkdf2",
"iterations": 10,
"name": "test",
"roles": [
],
"type": "user",
"derived_key": "4a122a20c1a8fdddb5307c29078e2c4269abffa5",
"salt": "36c0c05cf2a3ee321eabd10c46a8aa2a"
}
我尝试将“_design/_auth”文档从本地 CouchDB 安装复制到 Cloudant,但结果相同 - 没有散列密码。
我似乎在某个时候出轨了,但我不确定这发生在哪里。如何设置 Cloudant 以使用与常规 CouchDB 相同类型的身份验证?