firebase - 在多个 Firebase 实例之间实现单点登录
问题描述
我正在尝试在多个 Firebase 实例之间创建单点登录。假设我有一个名为 UserBase 的项目,然后我有另一个名为 Sales 的项目。两个项目都使用相同的用户,因此我将在 UserBase 项目上配置 Firebase 身份验证,并且我想使用相同的用户登录另一个项目。
我的想法是这样的:
我创建了一个连接到 UserBase 项目的网页 login.example.com,它接受用户名和密码,以及另一个将重定向到该页面的销售页面。
用户转到销售并单击“登录”,它将打开一个带有回调地址的 login.example.com 弹出窗口。成功登录后,我将使用 user.getIdToken 获取令牌并将其发送到云函数(UserBase),该函数将验证令牌并使用回调地址将其传递给另一个云函数(销售),这将返回一个令牌对于销售,此令牌将返回到销售页面,然后我将使用 signInWithCustomToken 使用有效的销售令牌登录。
像这样的东西:
TokenU 是 UserBase 的 JWT,tokenS 是 Sales 的 JWT
|Sales page| -callback-> |Login page| -tokenU-> |UserBase Cloud Function| -token?-> |Sales Cloud Function|
| | <--tokenS-- | | <-tokenS- | | <-tokenS- | |
一切正常,但现在我只是将未加密和未签名的 uid 从 UserBase Cloud Function 发送到 Sales Cloud Function,这显然不理想,否则任何人都可以仅使用 uid 登录。
这只是一个简化的例子,我们将有几十个连接但独立的项目,只共享用户,每个项目都有自己的数据(Firestore 和 Storage)所以为了保护我相信我需要用户存在于每个项目中,这可以通过在所有项目上创建具有相同 uid 的令牌来完成。此外,理想情况下,用户应该只为所有项目输入一次密码。
所以我有两个问题:
- 如何在不共享私钥的情况下安全地将用户从 UserBase Cloud Function 发送到 Sales Cloud Function?
- 假设问题 1 已解决,这是一个有效且安全的方案吗?
解决方案
推荐阅读
- php - 目标类不存在/ Laravel - 作曲家
- vba - 设置焦点不适用于 Microsoft 访问
- office-js - 在没有 Yeoman 生成器的情况下使用 ExpressJS 配置 Office JS 单词加载项
- ruby-on-rails - 以 ruby 语言集成 Microsoft Teams api
- python - 我想在客户注册我的网络应用程序时为他们创建一个唯一 ID
- istio - Istio EnvoyFilter 速率限制
- python - 用python cx_Oracle比较不同oracle数据库中的两张表
- reactjs - 如何确定 useCallback 是否值得甚至更好地提高性能?
- laravel-8 - 如何在 laravel 8 中为不同的守卫使用单独的电子邮件验证?
- c# - ESP32:将广播发送到本地网络并使用 Android 应用程序接收