Cloudant 身份验证:缺少 _users 数据库

Posted

技术标签:

【中文标题】Cloudant 身份验证:缺少 _users 数据库【英文标题】:Cloudant auth: lacks _users database 【发布时间】:2013-08-05 01:41:38 【问题描述】:

我正在 Cloudant 上设置 CouchDB,但我很困惑,因为 Cloudant 的身份验证方式似乎与常规 CouchDB 不同。具体来说,Cloudant 似乎缺少 _users 数据库。

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

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

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

“云雾”: “没人”:[“_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 相同类型的身份验证?

【问题讨论】:

【参考方案1】:

我通过#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 见“生成密码_sha(仅适用于 1.1.x 及更早版本)”

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

10:05 非常好

10:05 这就是我需要知道的

【讨论】:

现在,8 个月后,cloudant 仍然没有散列密码。 @jbeard4 为什么不接受你自己的答案? :) 十一月? "_id":"org.couchdb.user:me","_rev":"1-5a723e0fb15bb4e0d61e56797ebd8df7","name":"me","roles":[],"type":"user","password":"pwd"【参考方案2】:

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

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

【讨论】:

谢谢。但是,我无法开始该项目。你知道这个问题的答案吗:github.com/doublerebel/cloudant-user/issues/1? @ChrisSnow 我不喝咖啡,所以我在我的项目中使用了这个要点gist.github.com/weilu/10445007【参考方案3】:

截至 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 中那样自动设置。

【讨论】:

以上是关于Cloudant 身份验证:缺少 _users 数据库的主要内容,如果未能解决你的问题,请参考以下文章

Missed User 属性,用于计算 asp.net 核心身份中的用户/角色数

Laravel:依赖注入身份验证

PHP用户身份验证

PayPal PHP SDK:由于身份验证凭据无效或缺少授权标头,身份验证失败

收到错误:AWS API 请求后缺少身份验证令牌

未捕获的错误:尚未为上下文_加载模块名称“ @ cloudant / cloudant”。在javascript中使用require([])