Замена системы аутентификации на сайте, написанном на ASP.NET MVC
Есть отдельная единая cистема идентификации и аутентификации пользователей (ЕСИА).
Необходима такая схема авторизации:
При запросе пользователем страницы САЙТА, требующей авторизации, проверяем залогиненность на ЕСИА.
Проверяем наличие в сессии пользователя токена для связи сессии пользователя на сайте и на ЕСИА.
Если токена нет, то надо установить связь между сессиями, вызвав метод attach, в результате чего пользователь будет перенаправлен на сервер ЕСИА, где установится связь между сессиями, после этого пользователь вернется обратно на страницу сайта.
Если токен связи есть, то вызываем у сервера ЕСИА метод userInfo. Если пользователь авторизован на ЕСИА, то метод вернет информацию о пользователе (id, username, status, role, group_id, email).
По полученному email от ЕСИА ищем пользователя в локальной БД и авторизуем его.
Чтобы при каждом запросе не дергать сервер ЕСИА, можно авторизационную информацию кэшировать локально на 5 минут.
Если ЕСИА не вернул информацию о пользователе, значит он не авторизован. Перенаправляем пользователя на ЕСИА, вызвав метод serverLogin. Метод запрашивает у ЕСИА адрес страницы авторизации getLoginUrl и перенаправляет пользователя на этот адрес, передав в returnUrl адрес, куда будет возвращен пользователь после успешной авторизации.
Все методы системы авторизации есть, но написаны на php. Необходимо портировать на C# и заменить ASP.NET Identity на описанную выше систему авторизации через ЕСИА. Чтобы можно было на контроллер повесить свой фильтр вместо [Authorize].