如何根据设备平台为Firestore指定安全规则?
如何根据设备平台在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;
谢谢您。这对我帮助很大。谢谢。