Curl 使用HTTPS的CouchDB cookie身份验证

Curl 使用HTTPS的CouchDB cookie身份验证,curl,https,couchdb,Curl,Https,Couchdb,我完全按照文档中给出的指令使用HTTPS配置了CouchDB(只是我将ssl端口更改为6161)。我创建了两个管理员。然后,当我尝试使用cookie身份验证登录时,如下所示: curl -kX POST https://localhost:6161/_session \ -H 'Content-Type:application/x-www-form-urlencoded' \ -d 'name=admin&password=admin' 用户名和密码是正确的,因为我可以使用

我完全按照文档中给出的指令使用HTTPS配置了CouchDB(只是我将ssl端口更改为6161)。我创建了两个管理员。然后,当我尝试使用cookie身份验证登录时,如下所示:

curl -kX POST https://localhost:6161/_session \
   -H 'Content-Type:application/x-www-form-urlencoded' \
   -d 'name=admin&password=admin'

用户名和密码是正确的,因为我可以使用curl的
-u
选项登录。但我总是得到
未经授权的
错误。我不确定这里出了什么问题。

我终于想出了在这种情况下该怎么办。我需要结合基本身份验证和cookie身份验证才能登录

curl -kX POST -u admin:admin https://localhost:6161/_session \
     -H 'Content-Type:application/x-www-form-urlencoded' \
     -d 'name=admin&password=admin'
可能是因为我设置了
require\u valid\u user=true
,cookie身份验证是REST API之一,而基本身份验证是HTTP协议的一部分,并且上面的标志影响HTTP级别


但现在仍然存在问题:我是否需要每次提供两次登录信息来进行cookie身份验证?我提供一个用于基本身份验证的登录名和另一个用于cookie身份验证的登录名如何?这会对系统造成威胁吗?

您不能添加两个冲突的凭证对:)@JanLehnardt我不完全理解您的意思。但这是我发现哪种方法有效的唯一方法。我需要使用
-u
选项提供登录信息来执行每个请求,除非我有一个AuthSession cookie,所以要获得登录cookie,我需要使用
-u
选项在消息体中提供登录信息。我的意思是:CouchDB有许多它要通过的身份验证方案。默认情况下,它们的顺序是:oauth、basic auth、cookie auth。如果您发送一个包含cookie和基本身份验证信息的请求,CouchDB将首先运行oauth,确定没有oauth信息,然后转到下一个,即它看到存在的基本身份验证,然后授予或拒绝访问。如果basic auth允许或拒绝对会话的请求,则甚至不会查看会话cookieproceed@JanLehnardt我同意你的解释,但问题是,如果我不使用基本身份验证提供登录,我就无法让它工作,我总是得到“需要身份验证”。奇怪的是,如果我按照我在回答中给出的那样做,我将获得身份验证,并返回一个
AuthSession
cookie,我以后可以使用它,而无需基本的身份验证。所以我还是很困惑。但是谢谢你的解释!值得一提的是,我对couchdb2.0也有同样的问题:https POST会话总是导致未经授权的``HOST=”“curl-X POST$HOST/\u session \-H'内容类型:application/X-www-form-urlencoded'\-d'name=testlocal442&password=test'{“ok”:true,“name”:“testlocal442”,“roles”:[“foo”,“bar”}HOST=“”curl-kvX POST$HOST/\u session \-H'内容类型:application/x-www-form-urlencoded'\-d'name=testlocal442&password=test'{“error”:“unauthorized”,“reason”:“name或password不正确”。}```