使用令牌(Cookie:AuthSession = xyz)的PouchDB身份验证会导致不安全的标头“Cookie”

时间:2018-01-10 22:42:05

标签: cookies ionic-framework header couchdb pouchdb

我想通过使用couchdb提供的访问令牌连接到我的远程couchdb数据库,这可以通过发送标题来完成:

Cookie: AuthSession={COUCHDB_TOKEN}

用curl做这个没问题。但是使用带有以下代码的pouchDB:

new PouchDB(url, {
    ajax: { headers: {'Cookie': 'AuthSession=couchdb_token'} }        
});

我收到了错误:

Refused to set unsafe header "Cookie"

有没有办法将此令牌放入标题而不会出现此错误?

我已经完成了研究但是无法找到一种方法来使用pouchdb与远程数据库同步而不提供用户名&密码,但那些不应该存储在客户端那么..

1 个答案:

答案 0 :(得分:3)

问题是浏览器阻止设置'Cookie'请求标头,因为此标头由浏览器直接管理。您无法设置任何these headers

您应该使用_session端点对CouchDB进行身份验证。此端点将使用Set-Cookie标头进行响应,该标头在浏览器中建立AuthSession cookie,并在下次调用时将其发送回CouchDB。

我通常做的是在CouchDB中配置ProxyAuthentication(注意:在CouchDB 2.0中已经破解),然后在我的应用程序中使用自定义身份验证头进行身份验证。这种方法有点复杂,但允许您将应用程序身份验证令牌与CouchDB一起使用。 ---编辑---

请检查您是否拥有ProxyAuthentication enabled。 身份验证令牌的逻辑是here。 您不需要调用_session端点,只需使用正确的逻辑构建令牌。

- EDIT2 -

查看CouchDB代码,以这种方式生成令牌:

“X-Auth-CouchDB-Token”:hex_hmac_sha1(secret,“user@test.org”)

其中:

  • secret是由couch_httpd_auth / secret定义的密钥。
  • 用户是标题X-Auth-CouchDB-UserName
  • 中提供的用户

您应该在客户端重现此逻辑。