Могу ли я перехватить запрос на обслуживание PWA от облачного хостинга Google с облачными функциями?

Я использую стартовый набор PWA https://pwa-starter-kit.polymer-project.org/ для создания веб-сайтов. Я размещаю сайты на Google App Engine, потому что его очень легко размещать, и он предоставляет шаблон PRPL прямо из коробки https://pwa-starter-kit.polymer-project.org/building-and-deploying#building-for-prpl-server.

Однако в моем новом проекте я использую отдельный субдомен для каждого клиента. И у каждого клиента будет другой идентификатор арендатора в моей базе данных firebase. Мой вопрос: могу ли я перехватить http-запрос для PWA с помощью облачной функции и получить идентификатор клиента для клиента из моей базы данных на основе запрошенного субдомена?

В прошлом, когда я размещал все с помощью firebase (функции и хостинг), я мог добавить это в firebase.json, чтобы перенаправить http-запрос для PWA в функцию firebase, которую я назвал «renderApp».

"rewrites": [
  {
    "source": "**",
    "function": "renderApp"
  }

Как добиться такого же эффекта при использовании Google App Engine для размещения PWA? Я предполагаю, что что-то есть, но поскольку у меня больше нет firebase.json, я не знаю, как это сделать.

Короче говоря; Я хотел бы, чтобы идентификатор арендатора был встроен в мой PWA, когда я отправляю его клиенту, но сначала мне нужно найти свой идентификатор арендатора, расположенный в моей базе данных firebase (на основе поддомена из http-запроса)


person Gilberg    schedule 07.11.2019    source источник
comment
Правильно ли я предполагаю, что субдомен = идентификатор арендатора?   -  person Travis Webb    schedule 09.11.2019


Ответы (1)


Отказ от ответственности: у меня есть ответ для вас, а также предупреждение в конце этого ответа.

Во-первых, убедитесь, что вы настроили *.example.com в качестве пользовательского поддомена в App Engine, а *.example.com — в качестве CNAME у вашего поставщика DNS. Это направит все запросы к TENANT.example.com вашему приложению. (Я предполагаю, что поддомен представляет ваш идентификатор арендатора).

В своем приложении вы можете получить поддомен из Host заголовок. В nodejs это будет выглядеть примерно так:

const host = req.get('Host');
const [ tenant, ] = host.split('.');

Это решит вашу проблему, но имейте в виду, что вы действительно хотите отличить tenant_id только от аутентифицированного пользователя. Вы можете интегрировать Identity-Aware Proxy или специальное решение для аутентификации. Полагаться только на поддомен — это несколько ненадежный метод для достижения того, что, как я думаю, вы пытаетесь сделать, и позволяет любому клиенту исследовать недостатки, которые могут предоставить доступ к данным других арендаторов. Убедитесь, что вы используете субдомен только в косметических целях, в целях белой маркировки, а не в рамках стратегии аутентификации.

Смотрите также:

person Travis Webb    schedule 09.11.2019