我正在Cloudant上使用CouchDB进行设置,并且感到困惑,因为Cloudant的身份验证与常规CouchDB似乎有所不同。具体来说,Cloudant似乎缺少_users数据库。

我阅读了Cloudant身份验证常见问题解答here,它提供了以下说明:


我可以使用CouchDB安全功能(_users数据库,安全性
对象,验证功能)在Cloudant上?

是的你可以。如果你想
要使用_users数据库,您必须首先关闭Cloudant自己的数据库
您要通过_users管理的角色的安全性。为此,你
需要将如下所示的JSON文档放入_security
数据库的端点(例如
https://USERNAME.cloudant.com/DATABASE/_security):

{“ cloudant”:{
“ nobody”:[“ _reader”,“ _writer”,“ _admin”]},“ readers”:{
“名称”:[“演示”],“角色”:[]}}


这些说明工作正常,并允许我更新数据库的_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相同的身份验证?

最佳答案

我通过#cloudant IRC找到了答案:

09:59 创建_users是正确的选择
09:59 该API与CouchDB的较旧版本匹配,在该版本中,需要对客户端哈希进行哈希运算的密码
10:00 哦,我知道了
10:00 我们正在解决缺少对自动哈希的支持的问题
10:01 我试图在Couch中找到有关客户端哈希的文档。
10:02 Cloudant旨在与_users兼容的Couch版本是什么?
10:04 jbeard:http://wiki.apache.org/couchdb/Security_Features_Overview
10:04 请参阅“生成password_sha(仅适用于1.1.x和更早版本)”
10:04 jbeard:此特殊功能是我们与1.1.x兼容但不是较新版本的最后一点
10:05 优秀
10:05 这就是我需要知道的

关于authentication - Cloudant身份验证:缺少_users数据库,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18039704/

10-12 03:23