javascript - 为集中的用户数据库使用单独的服务器
问题描述
我正在使用 Meteor 1.10 + mongodb。
我有多个移动聊天和信息应用程序。
这些移动应用程序是使用 Meteor DDP 库本地开发的。
但我对所有应用程序都有相同的用户群。
现在我想在单独的服务器上创建一个单独的流星实例,以保持用户群集中。
我需要有关如何使用流星实现这种架构的建议。
牢记反应性和性能。
解决方案
对于具有完整反应功能的集中式用户群,您需要一个授权服务器,您的应用程序(= 资源服务器)将使用该授权服务器以允许经过身份验证/授权的请求。这基本上是 OAuth2 3 层工作流程。
看:
https://www.rfc-editor.org/rfc/rfc6749
登录服务
您还必须编写自己的登录处理程序 ( Meteor.loginWithMyCustomAuthServer
) 以避免DDP.connect
因为您必须管理两个用户群(一个用于应用程序本身,一个用于授权服务器),这将变得非常混乱。
在 Oauth2 授权请求成功后,此登录处理程序将检索用户帐户数据,这将使授权服务器的用户库成为您注册的任何应用程序的单点真实性(阅读 Oauth2 工作流程关于clientId
和secret
)。
订阅用户
Auth 服务器是您在其中创建、更新或删除用户的单点事实,并且在成功登录后,您的本地应用程序将始终从该帐户 Auth 服务器同步最新的用户数据(这也是 Meteor 的做法loginWith<Service>
)
然后,您无需任何 ddp 远程连接即可为您的用户订阅应用程序本身。这当然只有在您想要获取的用户数据实际上是针对在线用户时才有效。
如果您想订阅任何用户(数据可能尚未同步),您仍然需要远程订阅授权服务器上的发布。
请注意,为了通过此远程订阅对用户进行身份验证,您需要一个经过身份验证的 DDP 请求(也由以下软件包支持)。
执行
警告 - 以下是我自己的实现。这是因为我遇到了同样的问题并且在我之前没有发现其他实现。
有一个完整的工作帐户服务器(但一直在进行中)
https://github.com/leaonline/leaonline-accounts
它使用Oauth2 nodejs 实现,该实现已包装在 Meteor 包中:
https://github.com/leaonline/oauth2-server
并且相应的登录处理程序也已创建:
推荐阅读
- c# - 在 C# 中使用 LINQ 压缩多个列表是否有更紧凑/更好的方法?
- python - 如何合并 AWS Comprehend batch_detect_key_phrases() ResultList 和 ErrorList
- swift - NSCollectionView、NSCollectionViewItem 和 MVC
- git - git rebase 如何消除先前已合并到 master 上的提交?
- flutter - 为什么我们要添加同一系列字体文件的不同版本,例如(浅色、粗体、黑色或斜体...)?
- ios - 如何解决 UIBarButtomItem 的色调问题?
- angular - 是否可以将类型传递给可以“新建”的 Angular 组件?
- html - 在哪里可以找到 Chrome 使用的默认字体系列的 .tff 文件?
- linux - 使用终端在Mac中将文件从一个文件夹复制到另一个文件夹
- spring-boot - 控制器未正确处理路径变量 - 春季启动