couchdb之每个用户安全一个数据库
我使用 Ionic 开发了一个应用程序,其中每个用户都有自己的 PouchDB 数据库与自己的远程 CouchDB 数据库同步。我使用 couch_peruser=true 因此任何想要访问其数据库的用户都需要进行身份验证。
如果我们将用户名和密码存储在本地,或者如果我们要求用户在需要同步时随时提供它们,但这些选项都不好(安全问题或非用户友好),则该系统很容易实现。
我带来了这两个选项,但没有一个有效:
1) 对我来说最好的选择是使用 Cookie Authentication ,只需将 token 保存在本地并使用它,但不幸的是要与 token 连接 couchdb 要求使用 header :
Cookie: AuthSession={TOKEN}
但这是不可能的,因为它是未经授权的 header (不安全)并且被浏览器拒绝。
2)第二个选项是使用 couchdb 代理身份验证,但这与保存用户名和密码相同,因为 token 永远有效。
有没有其他处理身份验证的方法?我正在考虑使用替代用户数据库,生成一个假密码和用户名,然后将此凭据发送到用户应用程序中。在这种情况下,如果安全性受到威胁,用户可以更改其密码,因此服务器也可以更改第二个密码(以与我们撤销 token 相同的方式),但是仍然存在问题,因为使用被盗的凭据总是可能的直接访问 couchdb 数据库而不被看到..
请您参考如下方法:
感谢您的帮助,我无法使用 couchdb-auth-proxy所以我最终得到了以下解决方案,它具有防止直接访问 couchdb 的优势:
1) 创建一个节点服务器对用户进行身份验证,如果身份验证成功则将 couchdb token 返回给应用程序进行 cookie 身份验证
2) 使用 node-http-proxy 创建一个仅用作 couchdb 代理的节点服务器
使用以下代码:
(要求此路由器代码在 express 中间件中很早出现,否则它可能会更改响应并且 pouchdb 同步不起作用,因此将其放在 app.use(bodyParser.json()) 之前)
)
router.all('/*', (req: Request, res: Response, next: NextFunction) {
let token = req.get('X-Auth-Cdb-Token');
let httpProxy = require('http-proxy');
const proxy = httpProxy.createProxyServer({
target: target,
});
req.headers['Cookie'] = 'AuthSession='+token
proxy.web(req, res);
});
3) 在您的应用程序中,使用以下 header 设置 pouchdb 远程数据库:
remoteDB = new PouchDB(url, {
skip_setup: true,
ajax: {
headers: {
'X-Auth-Cdb-Token': couchdbToken
},
withCredentials: false
}
})
1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。