Я хочу реализовать систему единого входа с использованием SAML2. Но я не знаю, как заставить его работать с распределенной системой, где каждый экземпляр работает независимо на своем собственном сервере. Среда состоит из трех экземпляров:
Вопрос в том, что было бы лучшим подходом, если внешний интерфейс вызывает защищенный внутренний маршрут? Какую последовательность действий можно считать хорошей практикой?
На данный момент у меня в голове такое поведение:
Но пока я думаю об этой последовательности, я понимаю, что это не сработает. Это потому, что внешний интерфейс является собственным экземпляром и не зависит от внутреннего. Перенаправление на SSO-страницу, инициированное паспортом, не работает, если у вас есть отдельный экземпляр внешнего интерфейса. Это работает, если вы вызываете защищенный маршрут напрямую из браузера, потому что тогда у вас есть только два партнера по связи (поставщик услуг и поставщик удостоверений) вместо трех. Но это не тот случай.
Спасибо и привет
Филипп
Я сделал что-то подобное в предыдущей работе с этой логикой:
С помощью этой логики вы будете отделять внешний интерфейс от поставщика удостоверений и согласовывать его с внутренним.
@mayerph Ваше решение сработало? Или вы выбрали другой путь.
Пункт 1 и 2 однозначно нет. Пользователь должен быть перенаправлен на страницу входа в систему поставщика удостоверений для ввода учетных данных.
Основная концепция SSO-аутентификации заключается в том, что учетные данные не передаются из внешнего интерфейса по соображениям безопасности.
Большое спасибо. Это звучит здорово. Я дам ему попробовать. Я подумал о другом возможном решении: если пользователь не аутентифицирован, серверная часть отправляет ошибку во внешний интерфейс. Инициируется перенаправление на страницу SSO-Login (window.location.href). Для этого требуется, чтобы интерфейс знал IDP. После того, как пользователь ввел учетные данные и прошел проверку подлинности IDP, он отправляет запрос на маршрут обратного вызова... Я опубликую это решение, если оно сработает.