Я пытаюсь создать единый вход между несколькими экземплярами 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 на всех проектах.Кроме того, в идеале пользователь должен вводить пароль только один раз для всех проектов.
Поэтому у меня есть два вопроса:
- Как безопасно отправить пользователя из облачной функции UserBase наОблачная служба продаж без совместного использования закрытого ключа?
- Если вопрос 1 решен, является ли это действительным и безопасным сценарием?