【问题标题】:Firebase - can't trust OAuth returned details?Firebase - 不能信任 OAuth 返回的详细信息?
【发布时间】:2015-10-27 07:49:14
【问题描述】:

这个问题的简短版本是:如果您使用 Firebase 的 OAuth 功能来获取用户的电子邮件地址,您还需要自己确认/验证用户的电子邮件地址吗?

使用 OAuth 的一个常见好处是 - 根据 OAuth 提供商 - 您可以获得确认的电子邮件地址,但在将 Firebase 用于 web 应用时确实如此,例如使用 AngularJS 之类的绑定?

用户验证后,似乎有两个数据对象 - authData 可用于客户端,auth 可用于服务器端的安全规则。虽然authData 包含姓名和电子邮件等详细信息,但auth 只包含一个Firebase uid 加上provider。因此,如果我要获取该用户的电子邮件地址,它必须由客户端提供,因此(理论上)不能被信任?

根据我对 Firebase 文档的理解,如果我要为我的应用使用 GitHub OAuth,我需要执行以下操作:

  1. 让用户使用 Firebase/GitHub 登录/创建帐户
  2. 客户端 JS 从 GitHub OAuth 响应中检索电子邮件地址
  3. 客户端 JS “提交”此电子邮件以进行确认 - 可以通过多种方式完成
  4. 电子邮件地址应保存在 Firebase 中,状态为“未确认”(这样的字段对用户来说是只读的)
  5. 我需要自己的服务器端逻辑来处理此类电子邮件提交并发送确认电子邮件请求,例如通过像 Mandrill 这样的东西
  6. 我需要额外的服务器端逻辑来接收点击确认并在 Firebase 中将电子邮件地址标记为“已确认”

因此 Firebase 可以帮助我完成步骤 1-3,但步骤 4-6 需要通过我自己的服务器端代码来完成?

因此,这个问题的答案是是/否,但有一些理由/解释!

【问题讨论】:

  • 是的。这一切看起来都是正确的。

标签: oauth firebase firebase-security


【解决方案1】:

感谢@Kato 确认我在问题中的假设是正确的,因此我将明确提供此作为答案,并提供我没有想到的替代方案。

所以简短的回答是,“是的,您需要在使用 Firebase OAuth 时自己获取或验证用户的电子邮件”,而我上面列出的步骤是一种方法。

仍然需要服务器端代码但不需要发送电子邮件的另一种方法是让用户将他们的令牌写入他们的用户表条目,然后让服务器端代码使用它来从提供商自己检索经过验证的电子邮件地址。例如使用 GitHub 授权令牌和适当的范围,您可以检索用户的已验证电子邮件,而无需他们再次向您验证。

【讨论】:

    猜你喜欢
    • 2016-10-27
    • 1970-01-01
    • 2020-09-18
    • 2018-11-10
    • 2014-07-17
    • 1970-01-01
    • 2022-08-22
    • 2017-10-03
    • 1970-01-01
    相关资源
    最近更新 更多