2014-01-18 5 views
4

Это обычная ASP.NET приложение, использующее SQL поставщика членства для проверки подлинности. Хотя приложение работает большую часть времени. Мы недавно видим жалобы от пользователей, говорящих, что они видят учетную запись других пользователей.HttpContext.Current.User.Identity.Name Возвращает неправильное имя пользовательскому

Я уверен, что & подтвердил я снова непосредственно потреблять HttpContext.Current.User.Identity.Name в коде, чтобы получить информацию о пользователе. Поэтому при большой нагрузке я получаю другое имя пользователя.

Неужели кто-нибудь сталкивался с подобной проблемой? Возможна ли причина?

Приложение работает в ASP.NET 4.0, веб-формы, без кэширования, не обрабатывается никаких файлов cookie в коде, нет Javascripts, которые обнюхивают куки.

Я вижу, что эти две ссылки занимают одно и то же, но ответов нет.

http://bytes.com/topic/asp-net/answers/324385-serious-issue-httpcontext-current-user-identity-name

http://www.experts-exchange.com/Web_Development/Miscellaneous/Q_21105924.html

+0

Опишите ваше приложение немного больше. Используете ли вы какое-либо пользовательское кэширование (и, возможно, можете захватить данные одного пользователя или файл cookie ответа .ASPXAUTH в кеше и передать его последующим посетителям)? Если вы запускаете Центр обновления Windows на сервере, показывает ли он, что вы полностью исправлены? Какая версия ASP.NET? И так далее. – Levi

+0

Обновлен ответ, я проверю наличие обновлений на сервере. – Kusek

+0

Вы поняли это? Если да, то как? –

ответ

3

проверки подлинности форм не должны быть связаны с поставщиком членства слишком много.

FormsAuthentication сохраняет подписанную информацию пользователя в файле .ASPXAUTH cookie. И когда следующий запрос приходит на сервер, он расшифровывает значение cookie и устанавливает его обратно на HttpContext.Current.User.Identity.Name. Он использует MachineKey для шифрования \ decription. Затем он создает объект FormsIdentity на основе объекта FormsAuthenticationTicket, который содержит имя пользователя. Итак, ваше имя пользователя хранится на клиенте. И весь этот процесс не включает использование провайдера членства.

Forms Authentication использует членство только при входе в систему для пользователя, а затем на основе зарегистрированного пользователя FormsAuthentication создает файл cookie с UserName.

О вашей проблеме, вам нужно проверить значение cookie .ASPXAUTH для тех, у кого есть недопустимое имя пользователя. Вы можете попытаться записать информацию о файлах cookie для этих плохих запросов, а затем вы можете расшифровать их, чтобы получить информацию о пользователе из запроса. Или, если вы можете воспроизвести его локально, вы можете отключить шифрование файлов cookie (protection element), а затем проверить его значение для плохих запросов.

+0

Я не понимаю, как он мог вернуть идентификатор электронной почты случайного человека? Я пытаюсь воспроизвести эту проблему, но пока не повезло. Я знаю, что это происходит в редком случае, я видел скриншоты пользователя, которые посылают мне учетную запись, которая не принадлежит им и никак не связана с ней. – Kusek

+0

Это не должно быть случайным. Вам нужно проверить значения cookie для этого запроса, возможно, какой-то JavaScript в вашем приложении перезаписывает \ удаляет значения cookie, а затем Asp.Net просто использует пустое имя пользователя, так как для него нет cookie. –

+0

Как проверить значение cookie для этого запроса? Есть ли способ регистрации? Я знаю, это странно, но нет другого Javascript, который обрабатывает cookie. Это небольшое приложение, я пробежал его. Я убедился, что использую HttpContext.Current.User.Identity.Name во всех местах. – Kusek

Смежные вопросы