Этот ответ работает, но разочаровывает и тревожит одновременно.
Я провел 2 месяца, работая неполный рабочий день с технической поддержкой MSDN, и мы наконец нашли способ обойти эту проблему. Я собираюсь оставить это для Microsoft, чтобы решить проблему, поскольку это почти наверняка проблема в .net framework. Но сначала позвольте мне кратко изложить проблему, дать дополнительную соответствующую справочную информацию и несколько интересных вещей, которые мы нашли на этом пути.
Симптом мимолетный: на нашем сайте было несколько сообщений о пользователях, которые прошли бы аутентификацию на нашем сайте и увидели правильное состояние. Но, по-видимому, случайным образом они выходят из нашего веб-сайта или иногда сталкиваются с анонимным просмотром. Это было очень неприятно, почти невозможно воспроизвести на месте, дома.
Также по симптомам: при ведении журнала мы увидели, что мобильные браузеры (iphone, ipad и android) подвергались непропорционально сильному воздействию, хотя все браузеры и операционные системы подвергались воздействию в некоторой степени. И последний случайный симптом: он будет работать для пользователя один день, а не на следующий, а позже днем, снова работать. Конечно, переключение браузеров почти всегда решало проблему.
Мы быстро решили проблему с аутентификацией, вероятно, вокруг файла cookie аутентификации. Странная часть заключалась в том, что я смог доказать (отслеживая), что запросы, содержащие ошибки, содержали надлежащий файл cookie, который я смог расшифровать, но что инфраструктура .net игнорировала недетерминированным способом. В конце концов я начал регистрировать все запросы, которые были в этом состоянии - файл cookie авторизации игнорировался платформой .net, но, по-видимому, действительным для меня, и обнаружил, что это затронуло около 2% моих пользователей.
Я переключился с использования Thread.CurrentPrincipal.Identity на HttpContext.Current.User.Identity, но безрезультатно, и перепробовал несколько других настроек. Любопытно, что единственное изменение, которое я смог сделать, сделав вмятину, - это миграция на .net 4 framework (с 3.5). Проблема стала на порядок хуже. Также пробовал различные конфигурации балансировщика нагрузки и был в состоянии исключить конфигурации нескольких компьютеров - тот же компьютер, который выдал cookie-файл auth, позже отклонил бы его.
Чтобы повторить симптомы: у нас были определенные пользователи (недетерминированные), которые иногда не могли бы использовать наш веб-сайт в аутентифицированном режиме (также недетерминированном). Милый.
К этому моменту команда разработчиков в Редмонде была вовлечена, а также в тупик. Но они выдвинули предложение, которое в конечном итоге решило проблему, вот так:
Попробуйте заставить каркас Microsoft.net использовать куки в качестве режима аутентификации, а не использовать состояние без куки:
<authentication mode="Forms">
<forms cookieless="UseCookies" />
</authentication>
Перевернул коммутатор, и мгновенно проблемные запросы закончились (как только я истек сеанс тех, кто находился в нечетном состоянии).
Хотя я рад, что проблема была решена - или, скорее, обойдена, меня беспокоит недетерминированная обработка различных браузеров. Почему .net Framework однажды увидит браузер и будет относиться к нему как к поддерживающим куки, а позже в тот же день скажет, что должен использовать сеанс без куки?
Мое последнее беспокойство связано с тем, сколько других сайтов теряют 2% своего аутентифицированного трафика, не зная? Учитывая исправление, это очень похоже на ошибку в .net 4 framework.