Безопасен ли HttpContext.Current.User для сеанса без сохранения состояния?

Я использую веб-сайты Azure в течение нескольких месяцев, и я решил перейти на облачные службы по причинам SSL. Поскольку в моем проекте может потребоваться несколько веб-ролей, управление сеансом должно быть без сохранения состояния.

Вот как я работаю с пользовательскими данными в моем проекте. Если мне нужны данные, связанные с пользователем, я получаю их имя пользователя через HttpContext.Current.User.Identity.Name, Используя эту информацию, я запрашиваю свою базу данных, чтобы получить информацию о моих пользователях.

Это правильный способ сделать это? Я сделал некоторые исследования, но не смог найти действительно четкую информацию о том, где HttpContext.Current.User происходит от.

Пока это то, что я понимаю. Пользователь аутентифицируется с помощью Forms Authentication, которая создает куки на ПК пользователя. Когда пользователь снова запрашивает сервер, сервер проверяет информацию cookie и использует ее для заполнения объекта HttpContext. Если одна из других веб-ролей примет запрос в следующий раз, сможет ли он использовать этот файл cookie для заполнения HttpContext? (все может быть неправильно, так как я сказал, что это то, что я понимаю из документации и других ответов в Интернете)

Это то, что я пытаюсь понять в принципе. Надеюсь, я объяснил свою проблему достаточно ясно. Дайте мне знать, если это не ясно.

2 ответа

Решение

Я думаю, что ваше понимание верно. Когда мы используем FormAuthentication, после входа в систему генерируется cookie-файл с зашифрованной информацией о пользователе и чем-то вроде токена. Затем мы запрашиваем другую страницу, браузер отправляет этот файл cookie на сервер, а ASP.NET расшифровывает файл cookie, проверяет и заполняет информацию о пользователе в HttpContext.Current.User, независимо от того, сколько экземпляров на вашей стороне сервера. Поэтому я думаю, что безопасно использовать HttpContext.Current.User в веб-роли с несколькими экземплярами.

Я использую HttpContext.Current.User.Identity в приложении Azure, работающем в нескольких веб-ролях с отключенным SessionState без каких-либо проблем. Я настроил его на использование файлов cookie.

<authentication mode="Forms">
  <forms loginUrl="~/Account/LogIn" cookieless="UseCookies" timeout="2880" />
</authentication>
Другие вопросы по тегам