Shibboleth для нескольких сайтов в IIS
Я пытаюсь настроить Shibboleth Service Provider для двух сайтов на одном экземпляре IIS:
- Фронтенд со статическим HTML - просто SPA - например site.com
- Бэкэнд с API - просто REST - например site-api.com
Итак, когда я открываю первую точку входа, у меня есть ответ 302 с перенаправлением на IdP, после ввода учетных данных - перенаправление на site.com/Shibboleth.sso/SAML2/POST, и все работает нормально.
Мой SPA работает в браузере и делает запрос AJAX на site-api.com. И вот проблема, потому что у меня снова 302 ответа с перенаправлением на IdP. В случае, если браузер делает запрос, у меня нет проблем, потому что перенаправление на браузер IdP обрабатывается автоматически. И снова после аутентификации с помощью файла cookie сеанса в IdP он перенаправляется на site-api.com/Shibboleth.sso/SAML2/POST.
Как я могу разделить сеанс между двумя сайтами? Можно ли отключить перенаправление после первого запроса на site-api.com, если пользователь уже прошел аутентификацию на site.com.
Я использовал для второго сайта:
<ApplicationOverride id="site-api" entityID="https://site-api.com/shibboleth" />
Также я зарегистрировал ISAPI и RequestMap для site-api.com. Технически работает как site.com.
Думаю, я могу каким-то образом поделиться сеансом, используя атрибут в файле конфигурации XML, но у меня ничего не работает. Пожалуйста помоги.:)
1 ответ
Использование ApplicationOverride в Shibboleth SP вызывает вторичное приложение как отдельную службу, т.е. вы установили, что этот entityID уникален. В случае вторичного API я бы не стал защищать его с помощью Shibboleth, т.е. зачем защищать его с помощью Shibboleth SP (который создан для обеспечения аутентификации против IdP), если вы выполняете RESTful-вызовы с сайта, который уже аутентифицирован. Я думаю, вам нужно переосмыслить рабочий процесс аутентификации... более разумная идея:
(1) Получите сеанс для site.com от IdP с помощью SAML/Shibboleth,
(2) Создание сеанса приложения на основе сеанса SP (просмотрите сеансы в потоке SAML, на самом деле их несколько, а не только сеанс SP). Не говоря уже о том, что Shibboleth создан для аутентификации, а не для авторизации.
(3) Выполните вызов REST API на основе любого механизма безопасности API, который вы хотите... т.е. вы можете создать JWT на основе данных утверждения SAML и проверить его действительность в конечной точке API, потому что вы знаете сертификаты.
Веб-поток SAML на самом деле не предназначен для API, как вы пытаетесь использовать его здесь... 302, от которого вы пытаетесь избавиться, это ОБЯЗАТЕЛЬНО в рабочем процессе SAML.