如何根据设备平台为Firestore指定安全规则?

12 浏览
0 Comments

如何根据设备平台为Firestore指定安全规则?

我在Firestore中有一个数据库,与Android应用程序、iOS应用程序和网站相连。现在,对于所有这些,我们需要登录以访问数据。

我的问题是,我们如何指定规则:

  1. 对于Android和iOS应用程序,用户应该在登录后才能访问数据。
  2. 对于网站,用户可以决定是否登录,但仍然可以访问数据。

有人可以帮我吗?

0
0 Comments

如何根据设备平台在Firestore中指定安全规则?

Firebase身份验证或Cloud Firestore安全规则中没有内置功能来指示请求来自哪个平台。坦率地说,这听起来相当不安全:如果用户不需要在您的Web应用程序上登录,那么有什么阻止所有用户使用该Web应用程序呢?

但是,如果您真的想要实现此功能,最简单的方法是在Web应用程序中使用匿名身份验证。使用匿名身份验证,用户可以在不输入任何凭据的情况下登录:

firebase.auth().signInAnonymously()

现在在您的安全规则中,您可以简单地检查任何经过身份验证的用户:

allow read, write: if request.auth.uid != null

这允许任何经过身份验证的用户访问数据:对于Web应用程序来说,这将是匿名用户,而对于原生应用程序来说,这将是您在那里实现的任何登录方法。

一旦您为Web应用程序添加其他登录方法,您可以通过将提供程序链接到单个用户帐户来升级用户的匿名帐户。

请注意,没有任何限制用户创建自己的应用程序并针对您的项目配置运行。因此,他们可以创建一个也使用匿名身份验证的Android/iOS应用程序。如果您想要阻止这样的情况,事情会变得更加复杂...

以下是一种方法:

在Web应用程序中,使用匿名身份验证登录用户。这意味着用户不需要输入凭据。

在Web应用程序中,向您创建的Cloud Function发送请求。

在Cloud Function中,验证请求是否来自您的Web应用程序。我在这里没有指导,因为它与Firebase无关。

如果请求来自Web客户端,请向用户帐户添加自定义声明,将用户标识为Web用户。

admin.auth().setCustomUserClaims(uid, { isWebUser: true })

一旦客户端刷新其令牌(这可能需要最多一个小时,除非您强制刷新它),自定义声明将存在于其发出的所有请求中。因此,从那时起,您可以在Firestore安全规则中检查声明:

allow read, write: if request.auth.token.isWebUser == true;

谢谢您。这对我帮助很大。谢谢。

0