在多个Firebase实例之间实现单点登录

时间:2018-06-05 14:25:08

标签: firebase firebase-authentication jwt

我正在尝试在多个Firebase实例之间创建单一登录。所以假设我有一个名为UserBase的项目,然后我有另一个名为Sales的项目。这两个项目都使用相同的用户,因此我将在UserBase项目上配置Firebase身份验证,并且我希望使用相同的用户登录另一个。

我的想法是这样的:

我创建了一个连接到UserBase项目的网页login.example.com,它接受用户名和密码,以及另一个将重定向到此页面的销售页面。

用户转到Sales并点击“登录”,它将打开一个带有回调地址的login.example.com的弹出窗口。成功登录后,我将获得带有user.getIdToken的令牌,并将其发送到云功能(UserBase),该功能将验证令牌并使用回调地址将其传递给另一个云功能(销售),这将返回一个令牌对于Sales,此令牌将返回到Sales页面,然后我将使用signInWithCustomToken登录有效的Sales Token。

这样的事情:

TokenU是UserBase的JWT,tokenS是JWT for Sales

@JsonTypeName("YourSubClass01")
@JsonTypeInfo(use = JsonTypeInfo.Id.NAME,
              include = JsonTypeInfo.As.EXTERNAL_PROPERTY)
public class YourSubClass01 { ... }

一切正常,但是现在我只是将用户基础云功能中的未编入和未签名的uid发送到Sales Cloud功能,这显然不太理想,否则任何人都可以只使用uid登录。

这只是一个简化的例子,我们将有几十个连接但独立的项目,只共享用户,每个项目都有自己的数据(Firestore和Storage),以保护我相信我需要用户存在每一个都可以通过在所有项目中使用相同的uid创建令牌来完成。此外,理想情况下,用户只应为所有项目键入一次密码。

所以我有两个问题:

  1. 如何在不共享私钥的情况下将用户从UserBase云功能安全地发送到Sales Cloud功能?
  2. 假设问题1已解决,这是一个有效且安全的方案吗?

0 个答案:

没有答案