CouchDB 代理身份验证不起作用

CouchDB Proxy Authentication Doesn't work

当我向我的 couchdb 服务器发送一个 http 请求时,就像这里的文档中显示的那样 CouchDB Proxy Authentication,它没有给出文档中显示的响应,只是空数据。我做错了什么?

另外,我可以使用这个 Proxy Auth 开始会话吗?如果我尝试 POST /_session,我会收到 500 错误代码。

GET /_session HTTP/1.1
Host: 127.0.0.2:5984
User-Agent: curl/7.51.0
Accept: application/json
Content-Type: application/json; charset=utf-8
X-Auth-CouchDB-UserName: john
X-Auth-CouchDB-Roles: blogger

< HTTP/1.1 200 OK
< Cache-Control: must-revalidate
< Content-Length: 132
< Content-Type: application/json
< Date: Sun, 06 Nov 2016 01:10:58 GMT
< Server: CouchDB/2.0.0 (Erlang OTP/17)
< {"ok":true,
"userCtx":{"name":null,"roles":[]},
"info":{"authentication_db":"_users","authentication_handlers":["cookie","default"]}}

我在 CouchDB 问题跟踪器中发现代理身份验证在 2.0.0 版中被破坏。无论是那个还是文档都没有更新以表明它只适用于集群或其他东西。我改回 1.6.1 版,一切正常。我必须说代理身份验证如何工作的文档非常糟糕。

它的工作原理是您需要您的第三方身份验证服务器拥有“[couch_httpd_auth] 秘密”,并且当客户端进行身份验证时,您需要通过组合用户名和秘密来生成 HMAC-SHA1 令牌.然后,在您从客户端向 CouchDB 服务器发出的任何 http 请求中,如果您包含所有 headers:

  • X-Auth-CouchDB-Roles
  • X-Auth-CouchDB-UserName
  • X-Auth-CouchDB-Token

该请求将作为用户客户端进行身份验证。

此外,文档中没有提及,但是 /_session API 上的 POST 使用这些 headers 没有任何作用。

不是代理身份验证本身在 CouchDB 2.0 中被破坏,只是在当前版本中无法像旧的 1.6 天那样配置身份验证处理程序。

问题跟踪器中提到了一些补丁,它们将代理身份验证添加到身份验证处理程序列表中。此外,有一个拉取请求被接受并合并,这将可配置性带回了 CouchDB 2.0。

然而,为了利用这些优势,恐怕您要么必须等到下一个版本,要么自己从源代码构建 CouchDB 2.0。

从 CouchDB 2.1.1 开始,代理身份验证已修复。 latest (>2.1.1) documentation shows how to configure proxy authentication again, along with the important proxy_use_secret 选项。