CouchDB Cloudant授权:缺少用户数据库

b91juud3  于 2022-12-09  发布在  CouchDB
关注(0)|答案(3)|浏览(133)

我正在Cloudant上设置CouchDB,我很困惑,因为Cloudant似乎与常规CouchDB进行不同的身份验证。
我阅读了Cloudant auth常见问题解答here,它提供了以下说明:
我可以在Cloudant上使用CouchDB安全功能(_users数据库、安全对象、验证功能)吗?
可以。如果您想使用_users数据库,您必须首先关闭Cloudant自身的安全性,以便通过_users管理角色。为此,您需要将如下所示的JSON文档放置到数据库的_security端点(例如https://USERNAME.cloudant.com/DATABASE/_security):
{“混浊剂”:{“无名小卒”:["_阅读器”,“_编写器”,“_管理员”] },“阅读器”:{“名称”:[“演示”],“角色”:[] } }
这些指令运行良好,并允许我更新数据库的_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上的新用户in _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相同的身份验证?

s3fp2yjn

s3fp2yjn1#

我通过#cloudant IRC找到了答案:
09:59〈+kocomok〉creating _users是正确的做法
09:59〈+kocomok〉该API与CouchDB的旧版本相匹配,其中需要对客户端进行散列处理的密码
10点< jbeard>哦我明白了
10:00〈+kocomok〉我们正在解决对自动散列的支持不足的问题
10:01< jbeard>我正在尝试在Couch中查找有关客户端哈希的文档。
10:02 < jbeard>Cloudant打算与哪个版本的治疗床兼容?
10:04〈+科科科克〉jbeard:http://wiki.apache.org/couchdb/Security_Features_Overview
10:04〈+kocomok〉参见“生成密码_sha(仅适用于1.1.x及更早版本)”
10:04〈+科科科克〉jbeard:这个特殊的功能是我们与1.1.x兼容的最后一点,但与更新的版本不兼容
10:05< jbeard>优秀
10:05< jbeard>这就是我需要知道的

9q78igpj

9q78igpj2#

事实上,cloudant不支持哈希值生成。我发现了这个替代方案,它有助于使用cloudant服务中的_users db ...
https://github.com/doublerebel/cloudant-user

jbose2ul

jbose2ul3#

截至2020年,Cloudant对密码进行哈希处理,但不使用与CouchDB目前使用的哈希算法(pbkdf2)相同的哈希算法。为了更好的安全性和兼容性,仍然建议您自己生成哈希,例如使用couch-pwd
而不是提供

{ "cloudant": { "nobody": ["_reader", "_writer", "_admin"] }, "readers": { "names":["demo"],"roles":[] } }

文档现在建议使用couchdb_auth_only标志:

{
  "couchdb_auth_only": true,
  "members": {
      "names": ["demo"],"roles":[]
  },
  "admins": {
      "names": ["admin"],"roles":[]
  }
}

但是请注意,_admin角色不会像CouchDB 3中那样自动设置。

相关问题