Azure AD Web App с петлей перенаправления входа в систему зомби
Я работаю над приложением Azure с разработчиком, подготовкой и сине-зеленым слотом. Аутентификация обрабатывается Azure AD, и пользователь перенаправляется на страницу входа в microsoftonline. Я скачал профили публикации для каждого слота вчера и опубликовал все три. Я протестировал их на нескольких компьютерах и в браузерах, и все три слота работали правильно.
Этим утром я снова проверил их, и работает только слот разработчика. Staging и bluegreen оба перенаправляют на страницу входа в систему, но после проверки подлинности вступает в действие страшный бесконечный цикл перенаправления.
Сайт требует SSL, но это не связано с проблемой. Когда слоты работают, доступ к ним через HTTP или HTTPS корректно перенаправляет на HTTPS.
URL-адреса ответов также заданы и не связаны с проблемой.
Я не уверен, что смотреть дальше. Периодически запускается процесс Azure, который может повлиять на слоты? Почему слот работает несколько часов, а затем перестает работать?
Цикл: (Отправка запроса в [app]-[slot].azurewebsites.net => Ожидание [app]-[slot].azurewebsites.net => Ожидание login.microsoftonline.com => Отправка запроса в [app]-[slot].azurewebsites.net) и так далее.
1 ответ
Оказывается, эта проблема была вызвана полуизвестной ошибкой в реализации Microsoft Owin для System.Web: ошибка Katana #197. Существует даже пакет nuget, единственная цель которого - обеспечить обходной путь до исправления ошибки. По состоянию на апрель 2017 года пакет nuget был загружен 96 000 раз.
Из readme.md для пакета nuget Kentor.OwinCookieSaver:
"Из-за этой ошибки файлы cookie, установленные Оуэном, в некоторых случаях таинственно исчезают".
Обходной путь очень прост. Добавьте пакет nuget Kentor.OwinCookieSaver, а затем добавьте промежуточное программное обеспечение KentorOwinCookieSaver перед промежуточным программным обеспечением для обработки файлов cookie.
Добавь это:
app.UseKentorOwinCookieSaver();
непосредственно перед этим:
app.UseCookieAuthentication(new CookieAuthenticationOptions());
Если вы хотите узнать больше, вот несколько полезных ссылок: Репозиторий Owin Cookie Saver, Ошибка проекта Katana # 197