Реализация единого входа между несколькими экземплярами Firebase - PullRequest
0 голосов
/ 05 июня 2018

Я пытаюсь создать единый вход между несколькими экземплярами Firebase.Допустим, у меня есть проект под названием UserBase, а затем у меня есть еще один проект под названием Sales.В обоих проектах используются одни и те же пользователи, поэтому я настрою проверку подлинности Firebase в проекте UserBase и хочу войти в другой с теми же пользователями.

То, что я думал, было примерно так:

Я создаю веб-страницу login.example.com, которая подключена к проекту UserBase и принимает имя пользователя и пароль, и еще одну страницу для продаж, которая будет перенаправлена ​​на эту страницу.

Пользователь заходит в отдел продаж и нажимает «Войти», он откроет всплывающее окно для login.example.com с адресом обратного вызова.После успешного входа в систему я получу токен с user.getIdToken и отправлю его в облачную функцию (UserBase), которая проверит токен и передаст его в другую облачную функцию (продажи) по адресу обратного вызова, который вернет токендля продаж, и этот токен будет возвращен на страницу продаж, а затем я буду использовать signInWithCustomToken для входа в систему с действительным токеном продаж.

Примерно так:

TokenU - это JWT дляUserBase, tokenS - это JWT для продаж

|Sales page| -callback-> |Login page| -tokenU-> |UserBase Cloud Function| -token?-> |Sales Cloud Function|
|          | <--tokenS-- |          | <-tokenS- |                       | <-tokenS- |                    |

Все работает, но сейчас я отправляю только uid в незашифрованном и неподписанном виде из облачной функции UserBase в облачную функцию продаж, которая, очевидно, не идеальна,или любой может войти в систему, используя только uid.

Это просто упрощенный пример, у нас будет несколько десятков связанных, но независимых проектов, только с общим доступом пользователя, и у каждого проекта есть свои данные (Firestore and Storage) так, чтобы защитить это, я считаю, что мне нужно, чтобы пользователь существовал в каждом из них, что может быть достигнутосоздание токенов с одинаковым идентификатором uid на всех проектах.Кроме того, в идеале пользователь должен вводить пароль только один раз для всех проектов.

Поэтому у меня есть два вопроса:

  1. Как безопасно отправить пользователя из облачной функции UserBase наОблачная служба продаж без совместного использования закрытого ключа?
  2. Если вопрос 1 решен, является ли это действительным и безопасным сценарием?
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...