CouchDB 3.1.1 _users库普通用户调用/_session接口认证失败问题
问题原因
CouchDB 3.1.1 相对 1.6.1 版本有两处核心认证逻辑变更,你当前的操作和配置没有适配这两处变更,才会出现普通用户认证失败的问题:
- 创建用户的请求路径错误:CouchDB 3.x 版本认证逻辑读取的是集群级
/_users数据库的数据,你写入的是节点本地路径/_node/_local/_users,这部分数据不会被全局认证逻辑识别,自然校验失败。 - 密码迭代次数配置不匹配:1.6 版本的密码哈希迭代次数配置在
couch_httpd_auth段,3.x 版本将该配置迁移到了couch_password_hasher段,你只配置了前者,导致创建用户时哈希使用 3.x 默认的 10000 次迭代,校验时读取配置的 10 次迭代,二者不一致导致密码校验失败。
解决步骤
- 删除之前写入节点本地的无效用户
$ curl -X DELETE "http://my_main_admin:*****@127.0.0.1:5984/_node/_local/_users/org.couchdb.user:my_new_user?rev=1-f1fa0870666d17d7324e54128dfbcacb"
- 调整CouchDB配置,新增密码哈希器配置段
在配置文件中添加如下内容,和你现有的迭代次数配置对齐:
[couch_password_hasher] pbkdf2_iterations = 10
修改完成后重启CouchDB服务生效。
- 向集群级
/_users库重新创建用户
$ curl -s -H "Content-Type: application/json" -X PUT "http://my_main_admin:*****@127.0.0.1:5984/_users/org.couchdb.user:my_new_user" --data '{"name": "my_new_user", "password": "my_new_user", "roles": [], "type": "user"}'
- 校验用户文档正确性
请求用户文档确认密码哈希相关字段生成正常:
$ curl "http://my_main_admin:*****@127.0.0.1:5984/_users/org.couchdb.user:my_new_user"
返回结果中存在derived_key、salt、iterations三个字段,且iterations值为10即为配置生效。
- 测试会话创建,此时即可正常返回认证成功结果。
内容的提问来源于stack exchange,提问作者Aproram
相关产品推荐
相关产品推荐

