【问题标题】:Firebase authentication: uid vs. getToken (again...)Firebase 身份验证:uid 与 getToken(再次...)
【发布时间】:2019-12-31 20:58:10
【问题描述】:

参考文档和 SO,但是:

如果我获得了用户的 uid,因为 Firebase 在身份验证后将其交给了我,这还不足以证明该特定用户实际上已在我的网站上进行了身份验证吗?

this.afAuth.auth.onAuthStateChanged((user) => {
   if (user) {
      // safe to use the user.uid to populate my users collection
   } else {
      // user.uid is logged out now
   }
});

这样我就可以在我的用户表中添加其他信息:

myUsersCollection/[uid]/the_other_things:"这里有些东西"

Why can't we use getUid() to authenticate with your backend server in firebase authentication 的帖子似乎没有为我解决这个问题?

有没有办法可以欺骗 onAuthStateChanged 事件来欺骗我?如果我确实从其他来源获得了 uid,那么我当然不能确定。但只要我正确使用状态更改并信任 Firebase 身份验证,getToken() 如何帮助证明身份验证?

另外,即使 getToken() 仍在docs 中,它是否真的贬值了?

提前感谢您的洞察力!

【问题讨论】:

    标签: firebase firebase-authentication angularfire


    【解决方案1】:

    Firebase 使用 OAuth2,这是一种开放标准授权协议,可为应用提供安全访问的能力。 OAuth 使用授权令牌来证明消费者和服务提供者之间的身份。

    Firebase UID 不是私有的,不保证用户的身份。当onAuthStateChanged 返回一个 Firebase 用户时,您就知道该用户在为会话寿命设置的限制内获得了授权。虽然不太可能,但会话状态可能会受到损害。这就是安全敏感操作需要重新身份验证以及 I​​D 令牌寿命短(通常为一小时)的原因。

    【讨论】:

    • 这是否意味着 UID 是不稳定的?如果是这样,似乎这个名字是用词不当?然后最好将我的用户数据保留为:用户/[电子邮件]/数据...我正在使用无密码身份验证和管理员,而不是用户,驱动系统中的“用户”是谁(管理员必须添加一个用户的电子邮件地址)。
    • UID 不是易变的,而是它们对于身份验证不安全。对于组织用户数据,可以使用myUsersCollection/[uid]/ 结合适当的安全规则。
    猜你喜欢
    • 2018-04-08
    • 1970-01-01
    • 1970-01-01
    • 2018-04-12
    • 1970-01-01
    • 1970-01-01
    • 2017-10-08
    • 2017-12-03
    • 1970-01-01
    相关资源
    最近更新 更多