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 核心身份中的用户/角色数
PayPal PHP SDK:由于身份验证凭据无效或缺少授权标头,身份验证失败
未捕获的错误:尚未为上下文_加载模块名称“ @ cloudant / cloudant”。在javascript中使用require([])