【问题标题】:Getting firebase realtime database sending an oauth token (Angular iframe)获取发送 oauth 令牌的 firebase 实时数据库(Angular iframe)
【发布时间】:2022-01-10 03:11:11
【问题描述】:

我目前有一个 iframe,我嵌入到我的网站、chrome 扩展程序和 3rd 方网站中。

问题如下: 我正在使用 firebase 数据填充 iframe 的部分内容。 在我的网站中,我嵌入了自己的 iframe 并受到 firebase 令牌(视图)的保护,我不知道它是如何工作的,但它在调用数据库时会正确返回数据。 示例:

 getData(
    reference: string,
  ){
    const ref = `accounts/${reference}`;
    const dataReturn = this.db.object(ref).valueChanges();
    return dataReturn;
  }

这在我的 webapp 上返回得很好,当用户在我的 webapp 中注销时,数据就会受到保护(因为它必须如此)

问题从这里开始:当第 3 方嵌入我的 iframe 时,他们使用 oAuth 令牌(从我的 API 获取用户等),因此他们没有登录我的网站,因此,当他们嵌入并尝试获取数据(自动,因为我们调用 firebase onInit),它们被 firebase 阻止,因为它们没有有效的令牌/它们没有在我的网站中进行身份验证。

有没有办法使用该 oAuth 令牌让他们获取 firebase 数据?

在 chrome 扩展程序中发生了相同的场景,我们使用 oAuth 令牌让用户登录(以防止创建帐户并登录我们的 web 应用程序,防止出现 CORS 问题)。

这些是我在实时数据库 firebase 中的规则:

"accounts": {
            ".read": "auth !== null",
            ".write": false,
    }

谢谢!

【问题讨论】:

    标签: javascript firebase-realtime-database iframe oauth firebase-authentication


    【解决方案1】:

    如果 OAuth 令牌来自 Firebase 项目的协作者并且该协作者有权访问实时数据库,则客户端也将拥有对数据库的相同访问权限。

    在这种情况下,他们的 API 调用将绕过您数据库的安全规则,就像协作者登录 Firebase 控制台并访问那里的数据库一样。

    【讨论】:

    • 我明白了,但在这种情况下,我不希望最终用户使用我的 API -> firebase,我希望最终用户能够直接访问 firebase 实时数据库,是不是这样可以不设置 read: true?
    • 是,如果 OAuth 令牌来自 Firebase 项目的合作者,并且该合作者可以访问实时数据库而不受安全规则的限制。
    • 你能解释一下吗?我不确定我是否在关注.. 我如何从前端(我的 iframe/chrome 扩展/嵌入我的内容的第三方站点)发送 oAuth 令牌以允许读取实时数据库?我在前端有有效的 oAuth 令牌
    • 好的..所以对于任何想知道的人..一位同事通过将 oAuth 令牌发送到我们的后端并从那里返回一个有效的 firebase 令牌来解决这个问题。使用该令牌,我们只需使用 signInWithCustomToken() firebase 函数登录。这样我的用户就可以访问实时数据库,因为他们在 firebase 中进行了身份验证
    • 很高兴听到你弄清楚@gasparaufranc。 ? 为了对未来的访客最有帮助,您可以将其发布为自我回答吗?这样你就可以接受它,这会更突出地显示它(其他人也可以投票)。
    【解决方案2】:

    好的.. 所以对于任何想知道的人.. 一位同事通过将 oAuth 令牌发送到我们的后端并从那里返回一个有效的 firebase 令牌解决了这个问题。使用该令牌,我们只需使用 signInWithCustomToken() firebase 函数登录(当然应用逻辑,因此只有 oAuth 用户实际上可以自动使用它)。这样我的用户就可以访问实时数据库,因为他们在 firebase 中进行了身份验证

    【讨论】:

      猜你喜欢
      • 2013-01-06
      • 2020-08-01
      • 2019-06-27
      • 2020-11-11
      • 2021-09-07
      • 1970-01-01
      • 2022-12-07
      • 2019-12-21
      • 1970-01-01
      相关资源
      最近更新 更多