如何在Android中提供Firestore身份验证?

时间:2020-04-01 14:31:34

标签: java android firebase authentication google-cloud-firestore

我正在制作一个Android应用程序来管理财务。每个用户在我的数据库users中的集合financier下都有自己的详细信息。我没有使用任何类型的登录方法。这是使用我的自定义表单进行的自定义注册。

就目前而言,由于应用程序正在开发中,因此我一直在更改数据库规则以在给定日期之前接受任何请求。

我希望用户在我的凭据下进行操作。我不打算在任何地方发布此应用程序,但我希望对应用程序进行身份验证,就像在NodeJ中使用service-account-key.json

如果我将JSON文件放入我的项目中,那么在导出APK时会导出吗?如果是这样,那么任何用户都可以通过取出JSON文件将凭据获取到我的数据库中?

1 个答案:

答案 0 :(得分:1)

如果我对您的理解正确,那么您正在考虑将服务帐户凭据包含在应用程序中,然后将其交付给用户。我强烈建议不要这样做。

您在APK中包含的任何信息,或应用程序在运行时加载的任何信息,原则上都可以被该应用程序的用户拦截。如果这样做,服务帐户凭据将为他们提供对项目的完整,不受限制的访问。


最安全的访问方式是通过登录用户的Firebase身份验证,并在数据库的安全规则和Cloud Functions中使用该信息。

您可以让他们使用现有的提供程序登录,构建自己的自定义提供程序,甚至使用匿名身份验证(这意味着他们不必输入任何凭据)。所有这些的共同点是,用户获得一个UID和一个令牌,该令牌随每个请求传递到服务器和数据库,并且不能伪造。

这实际上是在APK中包含您的服务帐户凭据的另一种危险:它们将允许恶意用户为您的项目伪造自己的令牌/ UID。


一种无需使用Firebase身份验证登录的替代方法是,将对数据的所有访问路由到您自己编写的自定义后端,无论是在自己的服务器上还是在Cloud Functions中。但这意味着您还必须确保所有访问权限都已在该服务器端代码中得到授权。因此,您实质上是在写服务器端代码,而在Firebase的服务器端安全规则中则要写。