#android #firebase #firebase-authentication #firebase-admin
#Android #firebase #firebase-аутентификация #firebase-администратор
Вопрос:
Я пытаюсь создать механизм аутентификации, аналогичный Whatsapp и Whatsapp Web, используя Android на мобильном устройстве, Angular в Интернете и, надеюсь, Firebase.
Мне удалось войти в систему, используя номер телефона на мобильном устройстве, и анонимно в Интернете. Затем в Интернете я сгенерировал QR-код для идентификатора пользователя и отсканировал его с помощью мобильного устройства. Проблема в том, что я не могу найти способ связать анонимный сеанс из Интернета с сеансом, который находится на мобильном устройстве.
Я попытался загрузить учетные данные / токен / uid вместе с отсканированным кодом в базу данных Firebase и использовать облачную функцию Firebase для связи пользователей, но, похоже, облачные функции Firebase не могут связать их.
Есть ли способ добиться этого, используя только Firebase в качестве «серверной части»?
Ответ №1:
Как мне удалось это сделать:
- Я отсканировал QR-код с помощью мобильного устройства и расшифровал его, чтобы получить идентификатор анонимного пользователя — назовем его webUID.
- На мобильном устройстве я вызвал облачную функцию Firebase с webUID в качестве параметра.
- В облачной функции Firebase я сгенерировал пользовательский токен из uid вызывающего абонента (uid мобильного устройства) и сохранил его в /users /webUID. Это важно, потому что это единственный путь, который анонимный пользователь в Интернете может прочитать (правила базы данных Firebase).
- В Интернете я получил пользовательский токен из / users / webUID, удалил его из базы данных, вышел и вошел в систему, используя signInWithCustomToken и предоставленный пользовательский токен.
В конце оба устройства входят в систему с правильными учетными данными, а токен удаляется из базы данных.
Комментарии:
1. Вы подтверждаете личность на основе uid (uid не обеспечивают безопасности и не являются средством аутентификации или управления сеансом). Это очень плохой дизайн с точки зрения безопасности. Пользовательские идентификаторы не предназначены для аутентификации.
2. @bojeil Я вижу. Не могли бы вы также представить ситуацию, в которой злоумышленник мог бы, скажем, сделать что-то, чего он не должен был делать?
3. @bojeil Кроме того, здесь приведен пример из документации Firebase, в котором они предлагают использовать UID для защиты базы данных, и это то, что я использовал для защиты своей.
4. Правила безопасности Firebase всегда проверяют идентификационные маркеры для пользователей, прежде чем проверять базовые утверждения и раскрывать их в своих правилах. Это делается под капотом.
5. @SebastianGrigor Чтобы сделать то же самое, что делают пакеты Firebase SDK под капотом, вам также нужно будет передать токен ID на сервер, а затем проверить его в своих облачных функциях с помощью Admin SDK.