【发布时间】:2019-03-22 14:01:15
【问题描述】:
我正在使用带有 admin sdk 的 firebase 云功能,以便代表用户对实时数据库执行一些操作。
例如,如果用户想在数据库中存储一个新参数,它将在其依赖于直接可调用函数 (onCall) 的 android 客户端上按下一个按钮。这个可调用函数会将参数保存在数据库中的正确位置。
现在,我了解到onCall函数会在context参数中自动接收一些关于用户的信息,例如用户id和token,但我不知道这些参数是否用于控制用户的有效身份.
由于该功能是在完全权限模式下使用 admin sdk 运行的,所以我想确保用户是他声称的那个人。如果一个用户窃取了另一个用户的uid,并用这个uid调用了函数,但使用了自己的Auth token,他会被检测到吗?
该函数是否检查用户 id (uid) 是否符合 Auth 令牌?
如果是,我唯一要做的就是检查 context.auth 是否与 null 不同?
【问题讨论】:
-
确认一下,android 客户端正在调用云函数,然后通过管理 API 访问 firestore/db。如果是这样,请查看stackoverflow.com/questions/42751074/… 了解如何保护该功能。
-
好的,我的android客户端使用firebase客户端库,所以我可以依赖callable函数而不是简单的Https触发函数。在您链接的问题中,其中一个答案指出可调用函数可确保用户的真实性,但我仍然不明白该函数是否仅控制令牌,或者还控制令牌-uid 合规性。
-
auth.uid 已经过验证,因此您可以指望它有效/匹配令牌。但是,Firebase 管理 API 不运行安全规则,因此您需要确保您的更新或查询验证用户具有访问权限。
-
我还是不明白。验证 auth.uid 是什么意思?如果因为匹配token而被验证,ok,我确定用户的真实性。
-
auth.uid 是从 android 函数作为参数传递的,还是在服务器端通过令牌自动生成?
标签: firebase google-cloud-functions firebase-security