首页 > 解决方案 > 如何实现安全且同步的客户端到服务器连接

问题描述

我正在努力理解应该如何实现 pouchDB 交互。假设我想要一个具有同步和身份验证的离线优先应用程序,我是否需要实现一个中间人,例如节点服务器,以确保我的主服务器凭据受到保护,因为客户端上有一个带有 new PouchDB('name', '<a href="https://username:password@server/dbname" rel="nofollow noreferrer">https://username:password@server/dbname') 我对主数据库的信任被暴露了。连接到节点服务器并决定是否允许访问会更好吗?

在此处输入图像描述

这将如何完成?我可以使用身份验证处理与服务器的直接连接并且它是安全的吗?或者是否需要一个中间人来确保安全。

如果需要中间人,您是否需要实现一种 api 即

//client
const db = new Pouch('days')
db.sync(remote)

//server
app.get('/db/days', (res, req) => // do some pouch stuff for each db)

https://github.com/pouchdb-community/pouchdb-authentication

标签: javascriptnode.jscouchdbpouchdb

解决方案


稍微简化一下,如果您的应用程序由应用程序“主”数据库支持并且使用一组凭据运行,则您需要一个中间层:然后您需要将所有用户的数据多路复用到一个数据库中。

由 CouchDB/Cloudant 支持的应用程序通常使用“每用户数据库”模式,这意味着每个应用程序用户都有自己的数据库和自己的凭据,这意味着很多事情在概念上变得更简单,并且中间层可能不需要。

请注意,如果您打算满足数百万用户的需求,则需要考虑“每个用户的数据库”模式才能很好地扩展。

在 Cloudant 上,您还可以使用 API 密钥来定义访问权限。

如果您希望 db-per-user 模式的简单性没有(某些)缺点,您可以从 Cloudant Envoy ( https://github.com/cloudant-labs/envoy ) 中获得一些灵感——将用户数据多路复用到单个数据库中的瘦代理,同时仍向外呈现 db-per-user API 表面。免责声明:我是 Envoy 的作者之一。


推荐阅读