我应该如何为 Firebase 身份验证创建新的联合身份提供程序
Posted
技术标签:
【中文标题】我应该如何为 Firebase 身份验证创建新的联合身份提供程序【英文标题】:How should I create a new Federated Identity Provider for Firebase Authentication 【发布时间】:2018-05-05 01:48:42 【问题描述】:我想将 PayPal 登录功能集成到 android 应用程序中,以便向 Firebase 数据库验证客户端。我设法在 node.js 服务器上创建了一个自定义函数,该函数从提供的 uid 创建令牌,以便在客户端应用程序中使用“使用自定义令牌登录”功能。我应该通过 https 将 uid 发送到 nodejs 服务器以获取令牌吗?有没有更好的办法?
【问题讨论】:
【参考方案1】:不要创建接受 uid
并返回自定义令牌的 HTTP 端点。这是一个巨大的安全漏洞,因为任何攻击者都可以冒充任何知道其uid
的用户。
您需要做的是:
-
实施 paypal OAuth 代码流。您可以为此使用第三方库。
当您获得贝宝 OAuth 授权码时,您将其发送到您的后端,您使用贝宝客户端 ID 和密码来交换贝宝刷新令牌和访问令牌。然后,您可以获得与该贝宝用户关联的用户信息,包括他们的贝宝 uid。然后,您将使用 Firebase Admin SDK 生成一个 Firebase 自定义令牌并将其返回给客户端。
在客户端上,您将通过
signInWithCustomToken
使用该自定义令牌完成登录。
在这种情况下,您将公开一个 HTTP 端点,该端点接受一个授权代码并返回一个 Firebase 自定义令牌。
这是基本思想(不包括细节)。当然,您仍然必须通过传递一些状态来确保流程在同一设备上开始和结束,然后检查您最终是否将其取回。您还必须确保使用应用链接等方式将身份验证代码返回到正确的应用。Firebase 动态链接在那里会很有帮助。
【讨论】:
事实上,这是我对安全性的担忧。由于 firebase 不允许我直接与外部服务器通信,因此我决定首先使用 google 身份验证。然后我会在数据库中添加一个标志来标记用户是否拥有经过验证的 PayPal 帐户,并在客户端应用程序中完全实现 Paypal oauth 对其进行更新。我想我可以使用 nodejs 函数返回 base64 clientid:secret 以使用客户端上的 pp aouth 流。你认为是个好主意吗?谢谢 不,当然不是。不要将客户端 ID 或机密返回给客户端。身份验证代码流旨在在后端服务器上完成。 好的,我想我会尝试混淆应用程序内的 api 秘密,看看它是如何进行的。在这个阶段我没有必要切换到付费计划或设置自己的服务器 混淆没有任何作用,尤其是在您传递硬编码字符串时。您在这里将所有用户置于危险之中。如果安全中有一条规则,那么您就违反了它。 我不明白你的意思。我认为我只是将我自己的贝宝的 api 密钥置于危险之中。除了 evreything 在 https 上运行以上是关于我应该如何为 Firebase 身份验证创建新的联合身份提供程序的主要内容,如果未能解决你的问题,请参考以下文章
如何为 Flutter Web 添加 Firebase 预构建的身份验证 UI?
Firebase Auth on Web - 如何为电子邮件/密码登录添加垃圾邮件保护