Cloudant auth:缺少_users数据库

时间:2013-08-04 04:27:10

标签: authentication couchdb cloudant

我在Cloudant上使用CouchDB进行设置,我感到很困惑,因为Cloudant似乎与普通的CouchDB不同。具体而言,Cloudant似乎缺少_users数据库。

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

  

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

     

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

     

{" cloudant":{       "没有人":[" _reader"," _writer"," _admin"]},"读者":{       "姓名":["演示"],"角色":[]}}

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

3 个答案:

答案 0 :(得分:12)

我通过#cloudant IRC找到答案:

  

09:59< + kocolosk>创建_users是正确的做法

     

09:59< + kocolosk> API匹配旧版本的CouchDB,其中密码需要散列客户端

     

10:00< jbeard>哦,我明白了

     

10:00< + kocolosk>我们正在解决缺乏对自动散列的支持

     

10:01< jbeard>我正在尝试在Couch中找到有关客户端哈希的文档。

     

10:02< jbeard>什么版本的Couch是Cloudant,旨在与_users兼容?

     

10:04< + kocolosk> jbeard:http://wiki.apache.org/couchdb/Security_Features_Overview

     

10:04< + kocolosk>请参阅“生成password_sha(仅适用于1.1.x及更早版本)”

     

10:04< + kocolosk> jbeard:这个特殊功能是我们与1.1.x兼容的最后一点,但不是更新的版本

     

10:05< jbeard>优异的

     

10:05< jbeard>这就是我需要知道的事情

答案 1 :(得分:1)

实际上,cloudant不支持哈希值生成。 我发现这个替代方法有助于在cloudant服务中使用_users db ...

https://github.com/doublerebel/cloudant-user

答案 2 :(得分:0)

截至2020年,Cloudant会哈希密码,但不会使用与CouchDB当前所使用的哈希算法相同的哈希算法(pbkdf2)。为了获得更好的安全性和兼容性,还是建议自己生成散列,例如与couch-pwd

而不是提供

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

The docs现在建议使用couchdb_auth_only标志:

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

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