Внедрение единого входа с Identity Server 4

Имея Identity Server 4, можем ли мы реализовать единый вход в систему, используемый различными приложениями, с одним сервером аутентификации пользователя?

Если да, то как мы можем это сделать? Имеются ли справочные материалы для того же?


person Satyajit    schedule 04.02.2017    source источник


Ответы (2)


На самом деле, вам не нужно ничего делать, чтобы включить единый вход. Он доступен по умолчанию, но не для всех сценариев.

Для того, чтобы SSO работала, есть только одно правило:

Пользователь должен войти в систему на веб-сайте IdentityServer, потому что именно там должен быть размещен файл cookie системы единого входа.

Система единого входа недоступна для типов предоставления, которые не требуют от пользователя войдите на сайт IdentityServer.


Как это работает:

Пользователь посещает webapp1, нажимает кнопку входа в систему и перенаправляется на веб-сайт IdentityServer для входа в систему. IdentityServer просканирует файл cookie системы единого входа, но не найдет его, поскольку это первый раз, а пользователь еще не прошел проверку подлинности.

После успешного входа в систему cookie SSO сохраняется (на веб-сайте IdentityServer), а аутентифицированный пользователь возвращается в webapp1.

Затем пользователь посещает webapp2. Пока пользователю не требуется аутентификация, он будет анонимным посетителем.

Аутентификация требуется, когда пользователь нажимает кнопку входа в систему или посещает защищенную страницу (например, защищенную атрибутом [Authorize]). Это запускает процесс аутентификации, который перенаправляет пользователя на веб-сайт IdentityServer.

IdentityServer снова будет сканировать файл cookie системы единого входа, но на этот раз он найден. После аутентификации пользователю не требуется повторно входить в систему, вместо этого он возвращается на веб-сайт как аутентифицированный пользователь.

Обратите внимание, что клиент может отменить файл cookie системы единого входа, установив запрос = логин.

Также обратите внимание, что файлы cookie не являются кроссбраузерными. При посещении webapp2 в другом браузере пользователю потребуется снова войти в систему, поскольку файл cookie системы единого входа недоступен для этого браузера.

person Ruard van Elburg    schedule 04.07.2020
comment
Вопрос: единственный способ заставить SSO работать (я думаю) - это добавить несколько RedirectIds к одному клиенту в конфигурации Identity Server. Это то, как это должно быть сделано, или можно использовать отдельных клиентов? Когда я делаю последнее, меня постоянно перенаправляют на страницу согласия для другого клиента. Очевидно, что если все они являются одними и теми же клиентами, такого перенаправления нет. Итак, он использует коллекцию RedirectUris как способ SSO? Ваше здоровье - person onefootswill; 10.08.2020
comment
@onefootswill Обычно существует только один экземпляр клиента, для которого достаточно одного URL-адреса перенаправления. Вы можете использовать один и тот же идентификатор клиента для нескольких экземпляров, и в этом случае вы можете добавить URL-адрес перенаправления для каждого экземпляра. Обратите внимание, что URL-адрес перенаправления используется для проверки, чтобы предотвратить вход от поддельного клиента. Согласие не связано с URL-адресами перенаправления. Согласие хранится в таблице PersistedGrants для каждого клиента. Использование другого клиента требует другого согласия пользователя. - person Ruard van Elburg; 11.08.2020
comment
Спасибо. Вчера вечером я понял, что мне даже не нужен экран согласия. Это просто не требование, и мы не предоставляем сторонним приложениям доступ ни к чему. Это просто наши приложения. Когда вы удаляете экран согласия, вы можете получить опыт единого входа (в моем тестировании), даже если вы используете отдельную конфигурацию клиента для каждого клиента. Итак, я вернулся к использованию отдельных клиентских конфигураций для отдельных клиентов. Пока все хорошо - person onefootswill; 12.08.2020

Да, вы можете, именно для этого используется IdentityServer4 (SSO и аутентификация). Имеется документация и некоторые образцы.

person Lutando    schedule 04.02.2017
comment
ничто в документации или примерах не показывает единую регистрацию для разных clientIds (то есть по одному на приложение) ... - person Leon; 02.06.2018