Потребность: мультидоменная сессия с одним приложением.
У меня как минимум два домена:
mydomain.comanother-domain.netВсе это покрывается одним и тем же приложением Symfony (на данный момент я использую версию 3.4).
Что мне нужно, так это способ однократной аутентификации на любом из этих веб-сайтов с помощью общей формы входа в систему по пути /login и за аутентификатором Guard.
Прежде всего, вот Gist с некоторым кодом, который я использую: https://gist.github.com/Pierstoval/ca0e9845cfa1118e3d22ea14eb7c8929
Сценарий:
connect в сеансе.В шаблоне, если у меня есть эта переменная connect в сеансе, я добавляю в шаблон такой код:
window._CONNECT_PATHS = [
"//mydomain.com/{{ path('connect', {'id': app.session.id}) }}",
"//another-domain.net/{{ path('connect', {'id': app.session.id}) }}"
];
_CONNECT_PATHS перехватывается сценарием JS, который просто выполняет HTTP-вызов POST //mydomain(...) с использованием AJAX.EventSubscriber, добавленным в этот Gist, который "должен" обеспечивает совместное использование сеанса.Это нормально? Кажется, это работает, но иногда, когда я аутентифицируюсь на одном веб-сайте, мне приходится повторно проходить аутентификацию на другом веб-сайте. И я не могу понять, когда это произойдет, а когда нет.
Любая идея?
Хм, да, я сначала подумал о сбросе любого сеанса с идентификатором, предоставленным во время входа в систему, это то, для чего нужен вызов AJAX.
Если вы уверены, что это небезопасно, я мог бы также попытаться найти решение для SSO, но мне, вероятно, понадобится больше материала JS :) Но это может позволить мне «войти в систему с (...)» с моим приложением, если мне нужно больше услуг :) Не думал об этом, так что, может быть, я попробую это, спасибо!
Если идентификатор сеанса в окне браузера - он небезопасен. Может быть, вы можете использовать «oauth»? Если да - отметьте этот пакет "hwi / oauth-bundle" подключите через соцсети и т. д.
Я не хочу "регистрироваться с помощью {внешней службы}", вместо этого я хочу, чтобы все мои приложения "регистрировались с помощью {моего" приложения "Подключить}", так что oauth может быть идеей. Возможно, я собираюсь посмотреть, как работает SensioLabsConnect.
привет @alex Мне любопытно ваше окончательное решение этой проблемы, поскольку я столкнулся с той же ситуацией. (И, кстати, ваша презентация на встрече в Монпелье была потрясающей, спасибо)
@ db306 Я этого еще не реализовал. Я все еще использую преждевременное решение, которое я добавил в эту проблему SO, но однажды я хочу реализовать сервер И клиент «Подключиться к {...}», но у меня нет на это времени и знания для его разработки или реализации потенциальных существующих пакетов / компонентов, которые могут выполнять эту работу.






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