У меня есть веб-приложение .NET 2.0, которое действует как заглушка аутентификации для более старого веб-приложения .NET 1.1. Таким образом, пользователь входит в систему через приложение 2.2, а затем перенаправляется в приложение 1.1, чтобы заняться своими делами. Я использовал технику , описанную Скоттом Гатри , с соответствующими машинными ключами в локальных файлах web.config, чтобы билет аутентификации мог быть прочитан обоими приложениями. Эта техника работала для меня в пяти случаях в течение нескольких лет.
До сих пор.
По состоянию на это утро четыре из наших сопряженных приложений, настроенных, как описано выше, перестали работать в рабочей среде: мы получаем отскок после (казалось бы) успешной попытки аутентификации. Во время попытки входа я возвращаюсь на страницу входа. Я проверил журналы событий и журналы IIS и не нашел никаких последствий. Мы видим, что cookie-файл auth установлен в наших браузерах. Мы пробовали несколько браузеров (IE и Chrome). В выходные я знаю, что на веб-сервере было установлено более десятка патчей, в одном из которых была добавлена Framework 4.0, но я не знаю, вызвало ли какое-либо из этих патчей проблему. Интересно, что перед Рождеством я заметил то же поведение на своем устройстве для разработчиков. С тех пор ни одно из четырех сопряженных приложений не было повторно развернуто, поэтому не думайте, что это была проблема развертывания, которая привела к его распространению в производство.
Существует одна пара приложений, которая все еще работает, и мы сравниваем код и конфигурацию, чтобы увидеть, что случилось, но пока мы ничего не нашли (иначе я бы не стал пишу этот пост!)
UPDATE
Я понял, что эта одинокая пара приложений делает правильно: она обрабатывает авторизацию через код . Поэтому я разработал обходной путь для моих больных приложений:
ОРИГИНАЛ:
<authorization>
<allow deny="?" />
</authorization>
Временное решение:
<authorization>
<allow users="*" />
</authorization>
Затем я добавил код на свою базовую страницу ASPX для проверки подлинности cookie:
if (Request.Cookies.Get(FormsAuthentication.FormsCookieName) == null)
Response.Redirect(System.Configuration.ConfigurationSettings.AppSettings["MembershipLoginURL"],true);
Кажется, мой код выполняет роль, которую раньше выполняла ASP.NET, а именно проверка того, авторизован ли пользователь. Итак - у меня есть обходной путь, но загадка остается.
Кто-нибудь знает, был ли патч от Microsoft, выпущенный за последние четыре месяца (наш сервер был только что обновлен за четыре месяца патчей), который отключил возможность ASP.NET аутентифицировать / дешифровать куки-файлы между веб-приложениями на версии .NET?