Откуда берутся данные User.Identity? - PullRequest
6 голосов
/ 14 апреля 2010

Например: если я получаю имя пользователя User.Identity.Name, оно взято из файла cookie .ASPXAUTH или извлекается из базы данных с использованием моего поставщика членства?

Какие-либо запросы к базе данных выполняются при доступе к User.Identity?

Спасибо.


РЕДАКТИРОВАТЬ: Прямо сейчас я почти уверен, что он исходит из cookie-файла билета аутентификации, но не могу найти официальную документацию для подтверждения этого. Кто-нибудь?

Ответы [ 4 ]

1 голос
/ 21 сентября 2010

Это должно ответить на ваш вопрос ...

«Билет для проверки подлинности с помощью форм не только содержит идентификационные данные пользователя, но также содержит информацию, помогающую обеспечить целостность и безопасность токена». Выдержка из следующей статьи Microsoft:

http://www.asp.net/security/tutorials/forms-authentication-configuration-and-advanced-topics-vb

В дополнение к этому объяснению наблюдение за поведением ASP.NET также поддерживает вывод о том, что имя пользователя на самом деле хранится в файле cookie ASPXAUTH: ASP.NET НЕ попадает в базу данных при последующих запросах страниц после аутентификации пользователя , Вы можете доказать это сами, как и я, запустив SQL Profiler для мониторинга базы данных, которая используется приложением ASP.NET.

Также известно, что имя пользователя и данные билета аутентификации НЕ хранятся в состоянии сеанса. Помимо проблем с безопасностью, такая реализация приведет к прерыванию членства ASP.NET, когда состояние сеанса отключено. Вот еще один ответ переполнения стека, показывающий, что данные проверки подлинности форм (членство) и состояние сеанса не имеют ничего общего друг с другом:

Создает ли FormsAuthentication.SetAuthCookie () cookie на основе сеанса?

Этот ответ также ссылается на статью MSDN, здесь , в которой подробно объясняется файл cookie ASPXAUTH, хотя статья, на которую я ссылался выше, кажется более актуальной.

1 голос
/ 20 мая 2010

Я полагаю, что данные аутентификации специфичны для сеанса и поддерживаются в процессе ASP.net или за его пределами или даже на сервере SQL. Как только пользователь аутентифицирован, генерируется сеансовый токен, токен используется для отслеживания информации аутентифицированного пользователя в службе состояний. При последующих запросах токен сеанса используется для получения идентификатора пользователя, и именно там мы получаем предварительно заполненные объекты, такие как User.Identity.Name. это должно быть реализовано либо в модуле проверки подлинности с помощью форм, либо в модуле проверки подлинности Windows, в зависимости от типа используемой проверки подлинности. Если вы установили режим аутентификации без файлов cookie, маркер сеанса отображается в URL-адресе. По истечении сеанса вся информация, относящаяся к сеансу, удаляется из службы состояний.

Надеюсь, это прояснит!

1 голос
/ 25 мая 2010

Это зависит от типа сеанса, который вы используете. Сессии могут быть изменены с помощью двух параметров 1. Использование Cookies-Cookieless или использование cookie 2. Процесс сохранения информации о состоянии сеанса -Inproc (в процессе), outproc (служба состояний ASP.net) или Sql Server.

Если вы используете Sql Server для хранения информации о состоянии, безусловно, будет выполнен запрос к базе данных для извлечения данных сеанса. Подробнее здесь -

http://www.codeproject.com/KB/aspnet/ExploringSession.aspx

0 голосов
/ 14 апреля 2010

.ASPXAUTH cookie / User.Identity происходит от аутентификации (Windows, Forms).

Если вы пытаетесь получить пользователя для членства, вам нужно использовать

  Membership.GetUser()

или

  Membership.GetUser(User.Identity.Name )

документация здесь , что приведет к вызову БД.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...