Firebase - 无法信任OAuth返回的详细信息吗?

时间:2015-10-27 07:49:15

标签: oauth firebase firebase-security

此问题的简短版本是:如果您使用Firebase的OAuth功能获取用户的电子邮件地址,您是否仍需要自行确认/验证用户的电子邮件地址?

使用OAuth的一个常见好处是 - 取决于OAuth提供商 - 您可以获得确认的电子邮件地址,但在将Firebase用于网络应用时确实如此。有像AngularJS这样的绑定吗?

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

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

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

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

1 个答案:

答案 0 :(得分:1)

感谢@Kato确认我在问题中的假设是正确的,所以我明确地提供了这个答案,并提供了一个我没有想到的替代方案。

所以简短的回答是,"是的,您需要在使用Firebase OAuth"时自己获取或验证用户的电子邮件,并且上面列出的步骤是单向的。

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