Безопасность использования токенов в клиентской части Firestore и группировка уведомлений - PullRequest
0 голосов
/ 02 марта 2020

У меня уже есть и приложение, которое разработано Ioni c - Angular и у меня есть REST API, которое разработано Nodejs и Mongodb. Услышав о Firebase, я решил перестроить его таким образом.

В моем старом приложении я использовал одну БД для всех клиентов и разделял их и их данные, которые они могут читать и записывать идентификатор группы .

Я сохраняю их идентификатор группы в своем токене jwt и отправляю его в заголовке запроса бэкенду. В бэкэнде я получу этот groupId и отфильтрую запрошенные данные по этому groupId, или когда они публикуют или помещают данные, я также проверяю и использую этот groupId. В этом случае они могут просто просматривать или изменять данные своей группы. Также я отправляю сообщение Socket.io этой указанной c группе для обновления своих данных и получения данных в реальном времени.

Мои вопросы о новом приложении (Firebase):

  1. Безопасно ли устанавливать и получать данные по group_id, который я получаю из пользовательского токена на стороне клиента Firestore? (Я не люблю использовать API, потому что у меня больше нет данных в реальном времени). Может ли пользователь изменить идентификатор_группы и получить данные других групп?

  2. Firebase уведомляет всех пользователей об изменениях и обновляет sh их данные для получения обновлений, и они в режиме реального времени данные. В моем случае мне нужно обновить данные указанной группы c, в которой изменяются ее данные. Можно ли это сделать или все пользователи во всех группах всегда обновляют sh свои данные, когда происходят изменения в БД?

РЕДАКТИРОВАНИЕ:

Вот пример кода. Мне нужно знать, может ли злонамеренный пользователь изменить значение, которое я отправляю в «где». Если да, то как я могу обезопасить себя, используя правила 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)));
    }

1 Ответ

0 голосов
/ 02 марта 2020

Если вы передадите group_id в качестве пользовательского утверждения в токене идентификатора аутентификации Firebase, его может вставить туда только тот, у кого есть доступ к административным учетным данным проекта, для которого этот токен идентификатора отчеканен. Пользователь не может изменить его значение на основе клиентского API или информации о конфигурации, необходимой для клиентских SDK.

...