首页 > 解决方案 > 为集中的用户数据库使用单独的服务器

问题描述

我正在使用 Meteor 1.10 + mongodb。

我有多个移动聊天和信息应用程序。

这些移动应用程序是使用 Meteor DDP 库本地开发的。

但我对所有应用程序都有相同的用户群。

现在我想在单独的服务器上创建一个单独的流星实例,以保持用户群集中。

我需要有关如何使用流星实现这种架构的建议。

牢记反应性和性能。

标签: javascriptnode.jsmongodbsocketsmeteor

解决方案


对于具有完整反应功能的集中式用户群,您需要一个授权服务器,您的应用程序(= 资源服务器)将使用该授权服务器以允许经过身份验证/授权的请求。这基本上是 OAuth2 3 层工作流程。

看:

https://www.rfc-editor.org/rfc/rfc6749

https://www.oauth.com/

登录服务

您还必须编写自己的登录处理程序 ( Meteor.loginWithMyCustomAuthServer) 以避免DDP.connect因为您必须管理两个用户群(一个用于应用程序本身,一个用于授权服务器),这将变得非常混乱。

在 Oauth2 授权请求成功后,此登录处理程序将检索用户帐户数据,这将使授权服务器的用户库成为您注册的任何应用程序的单点真实性(阅读 Oauth2 工作流程关于clientIdsecret)。

订阅用户

Auth 服务器是您在其中创建、更新或删除用户的单点事实,并且在成功登录后,您的本地应用程序将始终从该帐户 Auth 服务器同步最新的用户数据(这也是 Meteor 的做法loginWith<Service>

然后,您无需任何 ddp 远程连接即可为您的用户订阅应用程序本身。这当然只有在您想要获取的用户数据实际上是针对在线用户时才有效。

如果您想订阅任何用户(数据可能尚未同步),您仍然需要远程订阅授权服务器上的发布。

请注意,为了通过此远程订阅对用户进行身份验证,您需要一个经过身份验证的 DDP 请求(也由以下软件包支持)。

执行

警告 - 以下是我自己的实现。这是因为我遇到了同样的问题并且在我之前没有发现其他实现。

有一个完整的工作帐户服务器(但一直在进行中)

https://github.com/leaonline/leaonline-accounts

它使用Oauth2 nodejs 实现,该实现已包装在 Meteor 包中:

https://github.com/leaonline/oauth2-server

并且相应的登录处理程序也已创建:

https://github.com/leaonline/meteor-accounts-lea


推荐阅读