Couchdb 每个用户一个数据库的安全性

Couchdb 每个用户一个数据库的安全性,couchdb,pouchdb,Couchdb,Pouchdb,我用Ionic开发了一个应用程序,每个用户都有自己的PockDB数据库和自己的远程CouchDB数据库同步。我使用coach_peruser=true,因此任何想要访问其数据库的用户都需要进行身份验证。 如果我们在本地存储用户名和密码,或者如果我们要求用户在需要同步的任何时候提供用户名和密码,但这些选项都不好(安全问题或非用户友好),那么这个系统很容易实现 我有这两个选择,但都不起作用: 1) 我想到的最佳选择是使用,只需在本地保存令牌并使用它,但不幸的是,要连接令牌couchdb,请使用标头:

我用Ionic开发了一个应用程序,每个用户都有自己的PockDB数据库和自己的远程CouchDB数据库同步。我使用coach_peruser=true,因此任何想要访问其数据库的用户都需要进行身份验证。 如果我们在本地存储用户名和密码,或者如果我们要求用户在需要同步的任何时候提供用户名和密码,但这些选项都不好(安全问题或非用户友好),那么这个系统很容易实现

我有这两个选择,但都不起作用:

1) 我想到的最佳选择是使用,只需在本地保存令牌并使用它,但不幸的是,要连接令牌couchdb,请使用标头:

Cookie: AuthSession={TOKEN}
但这是不可能的,因为它是未授权的标题(不安全),并且被浏览器拒绝

2) 第二种选择是使用couchdb代理身份验证,但这与保存用户名和密码相同,因为令牌永远有效


是否有其他处理身份验证的方法?我想使用一个备用的用户数据库,生成一个假密码和用户名,然后发送这个凭证保存到用户应用程序中。在这种情况下,如果安全性受到威胁,用户可以更改其密码,以便服务器也可以更改第二个密码(与我们撤销令牌的方式相同),但是仍然存在一个问题,因为对于被盗的凭证,总是可以直接访问couchdb数据库而不被发现。

如果您编写一个渐进式Web应用程序,Cookie身份验证对此非常有用,因为浏览器会为您处理它。使用PockDB身份验证直接登录到CouchDB

在CouchDB端,将cookie配置为持久性,并在其上放置更长的生存期。例如,您可以将其设置为2周,这样您的用户只有在两周未登录时才会被要求输入密码

一旦达到某个阈值,cookie TTL就会自动刷新(我记得它是cookie TTL的一半,所以如果cookie超过一周,它就会被刷新)


CouchDB是为web而构建的,因此您可以利用它

感谢您的帮助,我无法使用,因此我最终使用了以下解决方案,该解决方案具有阻止直接访问couchdb的优势:

1) 创建节点服务器以对用户进行身份验证,如果身份验证成功,则将couchdb令牌返回到应用程序以进行cookie身份验证

2) 使用创建仅用作couchdb代理的节点服务器

使用以下代码:

(要求此路由器代码在express中间件中出现得很早,否则可能会更改响应,并且PockDB sync不起作用,因此请将其放在app.use(bodyParser.json()之前) )

3) 在应用程序中,使用以下标题设置PockDB远程数据库:

    remoteDB = new PouchDB(url, {
         skip_setup: true,
         ajax: {
            headers: {
                'X-Auth-Cdb-Token': couchdbToken
            },
            withCredentials: false
         }
    })

我认为选项2应该结合一些服务器端支持。您需要一个定制的身份验证机制,该机制由Ionic应用程序使用,并提供一个在服务器中生成令牌并将请求重定向到CouchDB的代理。通过这种方式,CouchDB不会直接暴露于Ionic应用程序,令牌也不会存储在客户机中。检查:但是我将无法使用PockB直接同步到couchdb,对吗?您可以使用PockDB通过auth代理与couchdb同步。CouchDB Auth Proxy backdbwith Proxy Auth如果您愿意在您的小袋应用程序和CouchDB之间设置代理服务器,则有无限多的可能性。谢谢,我仍在努力!我通过使用[(node http proxy)找到了一种简单的方法,但是后来我发现了一个关于数据库同步的问题。。
    remoteDB = new PouchDB(url, {
         skip_setup: true,
         ajax: {
            headers: {
                'X-Auth-Cdb-Token': couchdbToken
            },
            withCredentials: false
         }
    })