我想使用 couchdb 给出的访问令牌连接到我的远程 couchdb 数据库,这可以通过发送带有以下内容的标头来完成:
Cookie: AuthSession={COUCHDB_TOKEN}
我用curl 做到这一点没有问题。但是,使用 pouchDB 时,代码如下:
new PouchDB(url, {
ajax: { headers: {'Cookie': 'AuthSession=couchdb_token'} }
});
我收到错误:
Refused to set unsafe header "Cookie"
有没有办法将此令牌放入标头中而不会出现此错误?
我已经做过研究,但不可能找到一种在不提供用户名和密码的情况下使用 pouchdb 与远程数据库同步的方法,但这些不应该存储在客户端,所以..
问题在于浏览器阻止了“Cookie”请求标头的设置,因为该标头是由浏览器直接管理的。您不能设置任何这些标题 https://fetch.spec.whatwg.org/#forbidden-header-name.
您应该使用 _session 端点向 CouchDB 进行身份验证。该端点将使用 Set-Cookie 标头进行响应,该标头在浏览器中建立了 AuthSession cookie,该 cookie 在下一次调用中发送回 CouchDB。
我通常做的是在 CouchDB 中配置 ProxyAuthentication(注意:这在 CouchDB 2.0 中被破坏)模式,然后在我的应用程序中使用自定义身份验证标头进行身份验证。这种方法有点复杂,但允许您将应用程序身份验证令牌与 CouchDB 一起使用。
- - 编辑 - -
请检查您是否有启用代理身份验证 http://docs.couchdb.org/en/2.1.1/api/server/authn.html#proxy-authentication。
身份验证令牌的逻辑是here http://docs.couchdb.org/en/2.1.1/config/auth.html#couch_httpd_auth/x_auth_token。
您不需要调用 _session 端点,只需使用正确的逻辑构建令牌即可。
-- 编辑2 --
查看 CouchDB 代码,令牌是通过以下方式生成的:
“X-Auth-CouchDB-Token”:hex_hmac_sha1(秘密,“[电子邮件受保护] /cdn-cgi/l/email-protection")
Where:
- Secret 是由 couch_httpd_auth/secret 定义的密钥。
- 用户是标头 X-Auth-CouchDB-UserName 中提供的用户
您应该在客户端重现此逻辑。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)