Как перенаправить в другое приложение Single Sign On Identity Server 4 и выйти из системы - PullRequest
0 голосов
/ 11 мая 2019

У меня есть приложение A и приложение B, оба из которых являются Asp.Net MVC Core 2.2, которые должны вести себя так, как если бы они были одним приложением для конечного пользователя;Я использую SSO в Identity Server;и для того, чтобы разделить претензии между ними, я дал им то же имя файла cookie аутентификации, имя приложения и доступ к общему расположению ключа защиты данных в соответствии с инструкциями:

https://docs.microsoft.com/en-us/aspnet/core/security/cookie-sharing?view=aspnetcore-2.2

ЕслиЯ вхожу в A, а затем в Redirect to BI вижу заявки, как и ожидалось, между приложениями;однако если я затем выйду из B, то logoutId, который генерируется и отправляется на Identity Server 4, не знает о B.

Если я даю другое имя для файла cookie аутентификации, то я не могу поделиться претензиями, но после перенаправленияк B, а затем к выходу из B сгенерированный logoutId работает правильно.

Если после перенаправления на B ожидание ожидания сеанса входа в систему и повторная аутентификация завершаются, то выход из системы B работает правильно;и logoutId, который генерируется и отправляется на Identity Server 4, знает как A, так и B.

Я полагаю, что это происходит потому, что после перенаправления на B, когда атрибут Authorize вызывает проверку, что пользователь прошел проверку подлинности;который пользователь находится в Приложении A, и это «ошибочно» за то, что он уже Аутентифицирован в B;поскольку это единый вход, нет никакой причины для аутентификации в B, как если бы аутентификация была проверена с помощью Identity Server 4, тогда пользователь будет аутентифицирован;однако, поскольку аутентификация не проверена, информация о том, что пользователь перенаправлен на B, не сохраняется в общем cookie-файле аутентификации и, следовательно, при выходе из системы Identity Server 4 не получает правильный logoutId.

Что я могусделать, чтобы Identity Server 4 был уведомлен и, таким образом, обновил Shared Cookie после перенаправления в Приложение B?

1 Ответ

0 голосов
/ 11 мая 2019

Вы не должны использовать общие куки между вашими приложениями Angular для достижения единого поведения.Также вы не должны делиться претензиями между этими приложениями.В OAuth SSO достигается с помощью единого URI (вашего Identity Server 4), который все ваши доменные приложения используют для аутентификации пользователей, что означает, что как только пользователь переходит в приложение A и перенаправляется для входа в систему и завершения потока входа,cookie остается в вашем приложении Identity Server 4, а затем, как только вы перенаправите свое приложение B, оно увидит, что оно не аутентифицировано, и перенаправит его на Identity Server 4, который затем использует cookie и автоматически войдет в систему пользователя (можетдаже пропустить страницу согласия опционально).

Единый выход немного сложнее и достигается с помощью SignOutIFrame на вашем Identity Server 4. В двух словах, идея состоит в том, что, как только вы инициируете выход из одного из ваших приложений, послепользователь успешно выходит из приложения Identity Server 4, рендеринг этого SignOutIFrame заставляет всех других клиентов по желанию участвовать в потоке выхода из системы и очищать сеанс и т. д. для данного пользователя.Более подробную информацию можно найти здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...