Несколько доменов и один общий сеанс с Symfony

Потребность: мультидоменная сессия с одним приложением.

У меня как минимум два домена:

  • mydomain.com
  • another-domain.net

Все это покрывается одним и тем же приложением Symfony (на данный момент я использую версию 3.4).

Что мне нужно, так это способ однократной аутентификации на любом из этих веб-сайтов с помощью общей формы входа в систему по пути /login и за аутентификатором Guard.

Прежде всего, вот Gist с некоторым кодом, который я использую: https://gist.github.com/Pierstoval/ca0e9845cfa1118e3d22ea14eb7c8929

Сценарий:

  1. Когда я аутентифицируюсь через аутентификатор Guard, добавленный в этот Gist, я считаю, что пользователь должен аутентифицируется на других веб-сайтах, поэтому я устанавливаю переменную connect в сеансе.
  2. В шаблоне, если у меня есть эта переменная connect в сеансе, я добавляю в шаблон такой код:

    window._CONNECT_PATHS = [
        "//mydomain.com/{{ path('connect', {'id': app.session.id}) }}",
        "//another-domain.net/{{ path('connect', {'id': app.session.id}) }}"
    ];
    
  3. Эта переменная _CONNECT_PATHS перехватывается сценарием JS, который просто выполняет HTTP-вызов POST //mydomain(...) с использованием AJAX.
  4. Этот вызов AJAX перехватывается классом EventSubscriber, добавленным в этот Gist, который "должен" обеспечивает совместное использование сеанса.

Это нормально? Кажется, это работает, но иногда, когда я аутентифицируюсь на одном веб-сайте, мне приходится повторно проходить аутентификацию на другом веб-сайте. И я не могу понять, когда это произойдет, а когда нет.

Любая идея?

Может быть, потому что разные идентификаторы сеанса. Вы проверяли, как это работает с 20-30 пользователями онлайн? И когда я узнаю идентификатор сеанса, могу ли я подключиться к другому сервису? Если да - это небезопасно. На мой взгляд, решением для входа в мультидомен должен быть SSO (Single Sign-On). Лучший способ - это SAML, но это сложная технология.

0TshEL_n1ck 11.03.2018 16:15

Хм, да, я сначала подумал о сбросе любого сеанса с идентификатором, предоставленным во время входа в систему, это то, для чего нужен вызов AJAX.

Alex Rock 11.03.2018 18:35

Если вы уверены, что это небезопасно, я мог бы также попытаться найти решение для SSO, но мне, вероятно, понадобится больше материала JS :) Но это может позволить мне «войти в систему с (...)» с моим приложением, если мне нужно больше услуг :) Не думал об этом, так что, может быть, я попробую это, спасибо!

Alex Rock 11.03.2018 18:36

Если идентификатор сеанса в окне браузера - он небезопасен. Может быть, вы можете использовать «oauth»? Если да - отметьте этот пакет "hwi / oauth-bundle" подключите через соцсети и т. д.

0TshEL_n1ck 12.03.2018 09:12

Я не хочу "регистрироваться с помощью {внешней службы}", вместо этого я хочу, чтобы все мои приложения "регистрировались с помощью {моего" приложения "Подключить}", так что oauth может быть идеей. Возможно, я собираюсь посмотреть, как работает SensioLabsConnect.

Alex Rock 12.03.2018 10:00

привет @alex Мне любопытно ваше окончательное решение этой проблемы, поскольку я столкнулся с той же ситуацией. (И, кстати, ваша презентация на встрече в Монпелье была потрясающей, спасибо)

db306 10.04.2018 16:29

@ db306 Я этого еще не реализовал. Я все еще использую преждевременное решение, которое я добавил в эту проблему SO, но однажды я хочу реализовать сервер И клиент «Подключиться к {...}», но у меня нет на это времени и знания для его разработки или реализации потенциальных существующих пакетов / компонентов, которые могут выполнять эту работу.

Alex Rock 11.04.2018 16:56
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
7
706
0

Другие вопросы по теме