Как связать анонимного пользователя с номером телефона в облачной функции Firebase?

#android #firebase #firebase-authentication #firebase-admin

#Android #firebase #firebase-аутентификация #firebase-администратор

Вопрос:

Я пытаюсь создать механизм аутентификации, аналогичный Whatsapp и Whatsapp Web, используя Android на мобильном устройстве, Angular в Интернете и, надеюсь, Firebase.

Мне удалось войти в систему, используя номер телефона на мобильном устройстве, и анонимно в Интернете. Затем в Интернете я сгенерировал QR-код для идентификатора пользователя и отсканировал его с помощью мобильного устройства. Проблема в том, что я не могу найти способ связать анонимный сеанс из Интернета с сеансом, который находится на мобильном устройстве.

Я попытался загрузить учетные данные / токен / uid вместе с отсканированным кодом в базу данных Firebase и использовать облачную функцию Firebase для связи пользователей, но, похоже, облачные функции Firebase не могут связать их.

Есть ли способ добиться этого, используя только Firebase в качестве «серверной части»?

Ответ №1:

Как мне удалось это сделать:

  1. Я отсканировал QR-код с помощью мобильного устройства и расшифровал его, чтобы получить идентификатор анонимного пользователя — назовем его webUID.
  2. На мобильном устройстве я вызвал облачную функцию Firebase с webUID в качестве параметра.
  3. В облачной функции Firebase я сгенерировал пользовательский токен из uid вызывающего абонента (uid мобильного устройства) и сохранил его в /users /webUID. Это важно, потому что это единственный путь, который анонимный пользователь в Интернете может прочитать (правила базы данных Firebase).
  4. В Интернете я получил пользовательский токен из / users / webUID, удалил его из базы данных, вышел и вошел в систему, используя signInWithCustomToken и предоставленный пользовательский токен.

В конце оба устройства входят в систему с правильными учетными данными, а токен удаляется из базы данных.

Комментарии:

1. Вы подтверждаете личность на основе uid (uid не обеспечивают безопасности и не являются средством аутентификации или управления сеансом). Это очень плохой дизайн с точки зрения безопасности. Пользовательские идентификаторы не предназначены для аутентификации.

2. @bojeil Я вижу. Не могли бы вы также представить ситуацию, в которой злоумышленник мог бы, скажем, сделать что-то, чего он не должен был делать?

3. @bojeil Кроме того, здесь приведен пример из документации Firebase, в котором они предлагают использовать UID для защиты базы данных, и это то, что я использовал для защиты своей.

4. Правила безопасности Firebase всегда проверяют идентификационные маркеры для пользователей, прежде чем проверять базовые утверждения и раскрывать их в своих правилах. Это делается под капотом.

5. @SebastianGrigor Чтобы сделать то же самое, что делают пакеты Firebase SDK под капотом, вам также нужно будет передать токен ID на сервер, а затем проверить его в своих облачных функциях с помощью Admin SDK.