Firebase - auth.uid 是共享机密吗?

Posted

技术标签:

【中文标题】Firebase - auth.uid 是共享机密吗?【英文标题】:Is auth.uid a shared secret? 【发布时间】:2016-09-10 08:16:24 【问题描述】:

似乎当某人通过 oAuth 进行身份验证时,Firebase 会创建一个类似于 google:111413554342829501512 的 uid。

在 Firebase 规则中,您可以执行(读取和/或写入):

".read": "root.child('users').child(auth.uid).child('isAdmin').val() == true"

是否假设由于使用了 HTTPS,我无法通过嗅探网络来读取消息?这就是它的工作原理 - UID 是 Firebase 规则使用的共享密钥吗?

经过身份验证后,我在浏览器的本地存储中看到 firebase:session::ack 中的 UID。

【问题讨论】:

【参考方案1】:

知道某人的用户 ID 不是安全风险。

例如,我知道您的 Stack Overflow 用户 ID 是 4797603。仅凭这一事实,我就有可能在 Stack Overflow 上找到您。

但这绝不允许我假装自己是 Ron Royston。要执行后者,我需要知道您用于登录的用户名和密码(以及任何其他因素)。

这同样适用于 Firebase。如果你知道我在某个 Firebase 支持的应用程序中的 uid 是 google:105913491982570113897,你就不能突然假装是我。 Firebase 服务器验证 auth.uid 值是否基于该用户的实际凭据。唯一的方法是以我的身份登录,在这种情况下,您需要知道我的 Google 凭据。

【讨论】:

***.com/questions/58788289/… 讲了一个服务器端调用admin.auth().createCustomToken(uid) ,这是否意味着如果我偷了别人的uid,那么我可以成功调用这个函数? 您需要项目的服务器端凭据文件才能使用 Admin SDK。

以上是关于Firebase - auth.uid 是共享机密吗?的主要内容,如果未能解决你的问题,请参考以下文章

Firebase 规则如何获取“request.auth.uid”字段?

关于在Firebase auth Uid下检索嵌套数据并使用android studio推送uid

父和子的单独的firebase数据库规则

使用 auth.uid 限制对 Firebase-Database 的访问不起作用

Firebase Firestore 安全规则 |如果字段值与 auth uid 相同,则允许读取

IdToken()和Uid()在firebase中有什么区别