【发布时间】:2018-06-21 18:55:43
【问题描述】:
我使用 Ionic 开发了一个应用程序,其中每个用户都有自己的 PouchDB 数据库与自己的远程 CouchDB 数据库同步。我使用 couch_peruser=true 所以任何想要访问其数据库的用户都需要进行身份验证。 如果我们将用户名和密码存储在本地,或者如果我们要求用户在需要同步的任何时候提供他们,但这些选项都不好(安全问题或非用户友好),这个系统很容易实现。
我提供了这两个选项,但没有一个有效:
1) 对我来说最好的选择是使用Cookie Authentication,只需将令牌保存在本地并使用它,但不幸的是要连接令牌,couchdb 要求使用标头:
Cookie: AuthSession={TOKEN}
但这是不可能的,因为它是未经授权的标头(不安全),被浏览器拒绝。
2) 第二种选择是使用 couchdb 代理身份验证,但它与保存用户名和密码相同,因为令牌永久有效。
还有其他方法可以处理身份验证吗?我正在考虑使用替代用户数据库,生成假密码和用户名,然后发送此凭据以保存到用户应用程序中。在这种情况下,如果安全性受到威胁,用户可以更改其密码,以便服务器也可以更改第二个密码(以我们撤销令牌的相同方式),但是仍然存在问题,因为使用被盗的凭证总是可能的直接访问 couchdb 数据库而不被看到..
【问题讨论】:
-
我认为选项 2 应该与一些服务器端支持相结合。您需要 Ionic 应用程序使用的自定义身份验证机制,并提供在服务器中生成令牌并将请求重定向到 CouchDB 的代理。通过这种方式,CouchDB 不会直接暴露给 Ionic 应用程序,并且令牌永远不会存储在客户端中。检查:npmjs.com/package/couchdb-auth-proxy
-
但是我将无法使用 pouchb 直接同步到 couchdb 对吗?
-
您可以使用 PouchDB 通过 auth-proxy 与 CouchDB 同步。 CouchDB Auth-Proxy PouchDB
-
如果你愿意在你的 Pouch 应用和 CouchDB 之间建立一个代理服务器,使用 proxy-auth 有无限多的可能性。
-
谢谢,我还在努力!我通过使用 [google.fr/… (node-http-proxy) 找到了一种简单的方法,但后来我遇到了 pouchdb 同步问题..