是否可以在 Firebase 中仅接受来自我的应用程序的函数调用?
Posted
技术标签:
【中文标题】是否可以在 Firebase 中仅接受来自我的应用程序的函数调用?【英文标题】:Is it possible to only accept function calls from my app in Firebase? 【发布时间】:2020-02-12 15:11:11 【问题描述】:我正在 Unity 中创建一个游戏,用户可以使用 Level Creator 系统为关卡做出贡献。
我的应用程序设置为我只需要使用级别信息调用云函数,它处理重复条目并将其保存到 Firestore。所有这些都完美无缺。
基本上,我的问题是:我可以让我的函数只接受来自我的游戏的调用吗? (没有让我的用户注册?)。
当然,我使用的是functions.https.onCall((data, context) => )
。在 Firebase 的 the documentation 中,我注意到他们使用 context.auth
来检查用户是否经过身份验证。但是,我将此值记录到控制台,它似乎是undefined
。
我也对这条线感到困惑,来自同一个链接:
借助可调用对象,Firebase 身份验证和 FCM 令牌(如果可用)会自动包含在请求中。
也许context.auth
没有定义,因为我的游戏还没有在 Google Play / Apple Store 中?有什么想法吗?
【问题讨论】:
【参考方案1】:借助名为 Firebase App Check 的新功能,现在实际上可以将对 Callable Cloud Functions 的调用限制为仅来自在您的 Firebase 项目中注册的 ios、android 和 Web 应用程序的调用。
您通常希望将其与 Doug 在其answer 中描述的基于用户身份验证的安全性结合起来,这样您就可以对确实使用您的应用的滥用用户提供另一个保护。 p>
【讨论】:
【参考方案2】:不可能将可调用函数的调用限制为仅一个应用程序,并且该应用程序是否发布到任何商店都没有关系。部署函数后,任何有互联网连接的人都可以访问它。
您可以做的最好的事情是要求您的用户在您的应用程序中使用Firebase Authentication 进行身份验证,然后在函数中检查context.auth
以确定它是否应该按照用户的意愿行事。 context.auth
在没有认证的情况下是未定义的。如果您的代码确定该函数不应继续执行,您可以提前返回。但该函数仍然被调用。
【讨论】:
好的,我不想要求我的用户登录:您是否建议让他们匿名签名? @SantiagoDegetau 是的,这将是一个选项。只需在某个地方编码一个修复用户和 PW。 但是请注意,这仍然可能被黑客入侵 ;) 周围有一个 blanc 密码,或者您对其进行了加密.. 但是反编译您的应用程序的人仍然可以找出您如何加密并按顺序对其进行逆向工程手动调用方法...但至少比默认情况下更难;) 是的,这种方式可以使用匿名登录,但并不能确保用户确实在使用您的应用。 到目前为止,有没有办法确保未经身份验证的用户从我的应用程序调用该函数?以上是关于是否可以在 Firebase 中仅接受来自我的应用程序的函数调用?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 android 应用程序中仅从服务器获取更新的数据?
是否可以在通用应用程序中仅使用一个故事板为 iPod 和 iPad 提供不同数量的视图控制器?
是否可以在 .Net Core 应用程序中仅发布某些 appsettings.json