首页 > 解决方案 > 在 Firestore 客户端使用令牌声明和分组通知的安全性

问题描述

我已经有一个由 Ionic-Angular 开发的应用程序,并且有一个由 Nodejs 和 Mongodb 开发的 REST API。在听说 Firebase 之后,我决定以此重新开发它。

在我的旧应用程序中,我为所有客户使用了一个数据库,并将他们和他们可以通过groupId读写的数据分开。

我将他们的 groupId 保存在他们的 jwt 令牌中,并将其在请求标头中发送到后端。在后端,我将获取这个 groupId 并通过该 groupId 过滤请求的数据,或者当他们发布或放置数据时,我也会检查并使用这个 groupId。在这种情况下,他们只能查看或更改其组的数据。我还通过 Socket.io 向该特定组发送消息以更新他们的数据并获得实时数据。

我对新应用(Firebase)的问题是:

  1. 通过我从 Firestore 客户端的用户令牌获取的 group_id 设置和获取数据是否安全?(我不喜欢使用 API,因为我没有实时数据了)。用户是否可以更改 group_id 并获取其他组的数据?

  2. Firebase 会通知所有用户有关更改并刷新他们的数据以获取更新,并且他们拥有实时数据。就我而言,我需要更新其数据已更改的特定组的数据。是否可以这样做,或者当数据库发生更改时,所有组中的所有用户总是刷新他们的数据?

编辑:

这是代码示例。我需要知道恶意用户是否可以更改我在“where”中发送的值。如果是,如果使用 firebase 规则读取数据,我该如何保护?

    loadAllUnits(): Observable<Unit[]> {                      
        return this.db.collection(
            'units',
                ref => ref.orderBy("name")
                .where('groupId', '==', this.authService.currentUser.value.groupId)
            )            
            .snapshotChanges()
            .pipe(
                map(snaps => convertSnaps<Unit>(snaps)));
    }

标签: angularfirebaseionic-frameworkgoogle-cloud-firestorefirebase-authentication

解决方案


如果您group_id在 Firebase 身份验证 ID 令牌中作为自定义声明传递,则只能由有权访问为其铸造该 ID 令牌的项目的管理凭据的人放入其中。用户无法根据客户端 API 或客户端 SDK 所需的配置信息更改其值。


推荐阅读