Single Sign Off не очищает собственный сеанс RP
Я новичок в WIF. И теперь я столкнулся с проблемой при выполнении единого выхода.
Ниже приводится история моей проблемы: во-первых, я работаю над двумя старыми приложениями A и B, которые после аутентификации пользователя хранят информацию о пользователе в своей переменной сеанса. И приложения A и B имеют свою собственную локальную базу данных. Теперь моя работа заключается в использовании ADFS для включения единого входа (SSO) между двумя приложениями.
Теперь я создаю новый активный каталог для централизованного хранения пользователей. Когда пользователь пытается войти в приложение A через ADFS, приложение A должно проверить, что имя пользователя в заявке существует в локальной базе данных. Если существует, пользователь может войти в приложение А. В противном случае приложение А отклонит претензию.
Вот техническая часть:
Я расширяю WSFederationAuthenticationModule и проверяю входящую заявку с локальной базой данных в методе OnSessionSecurityTokenCreated. Если результат совпадает, я извлекаю информацию о пользователе из локальной базы данных и сохраняю ее в переменной сеанса (чтобы я мог минимизировать изменение кода). Приложение B использует тот же подход.
Я доволен SSO отсюда. Но проблема возникает, когда я выполняю единый выход:
Когда я выхожу из приложения A, я сначала очищаю собственный сеанс в приложении A и вызываю метод WSFederationAuthenticationModule.FederatedSignOut. Однако приложение B не очищает свой собственный сеанс. Я предполагаю, что OnSignedOut в WSFederationAuthenticationModule будет вызван. Как очистить сеанс приложения B, когда приложение A вышло из системы?
Это может быть очень запутанным. Пожалуйста, оставляйте любые комментарии, если вы найдете что-то неясное или нуждаетесь в дальнейшем объяснении.
1 ответ
Выход из WS-Fed осуществляется ADFS (он запрашивает gif с app/? Wa=wsignoutcleanup1.0), а не только локально. Это единственный способ уведомить другое приложение. Ваше приложение должно перенаправить в ADFS с помощью signouturl. Затем оба приложения будут уведомлены и смогут очистить свое состояние сеанса (с помощью запроса gif).