Мы пытаемся интегрировать сайт ASP.NET MVC с системой единого входа нашего клиента, используя PingFederate. Я хотел бы использовать встроенную платформу FormsAuthentication для этого. Я до сих пор об этом говорил:
Настройте мой Web.config таким образом, чтобы мой FormsAuthentication LoginURL переходил к действию «BeginAuthentication» моего сайта на контроллере «Security». Из этого действия я установил некоторые переменные сеанса (например, по какому URL-адресу обращались, поскольку Ping не будет отправлять мне эту информацию), а затем перенаправил на страницу входа нашего клиента на внешнем сайте (www.client. com / Войти, например).
Отсюда происходит аутентификация, и в том же домене, где работает наше приложение, создается файл cookie, содержащий уникальный идентификатор аутентифицированного пользователя. Я настроил его так, чтобы однажды в этом случае Ping-сервер перенаправляет на мое действие «EndAuthentication» на моем контроллере «Security».
В этом действии я вызываю метод ValidateUser моего класса членства, который берет этот уникальный идентификатор из файла cookie и загружает пользователя в наше приложение, к которому относится этот идентификатор. Я сохраняю этого зарегистрированного пользователя в нашей Сессии (например, Session ["LoggedInAs"]) и истекаю файл cookie, содержащий идентификатор аутентифицированного пользователя, предоставленного мне системой единого входа.
Все это работает хорошо. Вопрос, который меня интересует, заключается в том, что происходит после того, как наш пользователь уже прошел аутентификацию и вручную возвращается на страницу входа нашего клиента (www.client.com/login) и входит в систему как другой пользователь. Если они это сделают, то переход от № 2 выше к номеру 3 будет происходить как обычно - но, поскольку на нашем сайте уже существует аутентифицированный пользователь, создается впечатление, что система FormsAuthentication ничего не беспокоит, поэтому я не получить возможность проверить файл cookie, который я ищу, чтобы войти в систему как этот новый пользователь. Что я хотел бы сделать, так это где-нибудь в моем файле Global.asax (возможно, FormsAuthenticate_OnAuthenticate) проверить, существует ли файл cookie, который система SSO отправляет мне, и, если это так, выйти из приложения с помощью FormsAuthentication.SignOut ( ).
Другая проблема, которая, кажется, связана с этим, заключается в том, что, если я позволю истечь сроку моей Сессии, FormsAuthentication все равно будет считать меня аутентифицированным, и это позволит мне получить доступ к странице, даже если в моей Сессии нет зарегистрированного пользователя, поэтому страница не отображается правильно Должен ли я подключиться к событию Session_End и сделать здесь FormsAuthentication.SignOut ()?
По сути, я хочу знать, когда билет аутентификации создан
System.Web.Security.FormsAuthentication.SetAuthCookie (..) проверяется в потоке запроса, чтобы я мог определить, нужно ли мне SignOut () и принудительно выполнить повторную проверку или нет.
Спасибо за любую помощь. Извините за длину этого сообщения, пытаюсь быть максимально подробным.
Mustafa