私有服务器的Firebase身份验证
问题内容:
我正在开发一款Flutter应用程序,并希望使用Firebase身份验证服务来使我的用户使用以下方式进行注册/登录:
- 电子邮件/密码
- 谷歌
- 脸书
我有一个带有MySQL数据库的流明后端REST服务器。
问题:遍历大量的Firebase文档,我无法理解其工作原理的整个流程。
我可以使用该应用程序成功创建用户,并且这些用户会出现在Firebase控制台中,但是,我不知道如何使他们能够安全地与我的后端服务器通信。
我希望Firebase能够为我释放访问权限和刷新令牌,以用于我在应用程序和后端之间的私有通信,就像AWS
cognito所做的那样。取而代之的是,它发出一个JWT令牌“ ID令牌”,应在后端进行验证。但是,一旦验证了怎么办?
如何将数据库中的用户链接到经过身份验证的用户?存储在数据库中以映射到已认证用户的东西是什么?
我必须通过Admin SDK生成自定义令牌吗?
还是ID令牌是应该在每次请求时从客户端传递到后端然后进行验证的东西?但是,从该ID令牌到我的数据库该如何放置以将经过身份验证的用户与其数据链接起来呢?
问题答案:
这就是我现在的做法。效果很好。
- 在您的后端服务器上安装Firebase admin sdk(如果您使用的是php),这是我遵循并可以正常工作的内容:PHP Firebase Admin sdk
- 使用您的客户端(应用程序)中的 firebase SDK 获取firebase idToken, 为此 ,我使用了Firebase身份验证程序包。
- 将 idToken 发送到您的后端
- 使用Admin SDK来验证 idToken ,如果验证成功,它将返回一个Firebase用户对象。您可以对其执行各种管理操作(修改,删除,获取不同的数据等)。
- 从Firebase用户对象获取 uid 。
- 将 uid 存储在数据库中。
- 现在,每次经过身份验证的用户向您的后端服务器发出请求时,您都将 idToken 附加到请求的标头。
- 每次您验证(请参阅第4步)后端服务器上的 idToken 时,如果验证成功,则提取uid以知道要在数据库中查询哪个用户。
欢迎对此发表任何评论/改进:)