Как работает аутентификация формы ASP.NET: распознавание файлов cookie по запросу - PullRequest
2 голосов
/ 17 января 2012

Я читаю при проверке подлинности формы в ASP.NET и не могу понять какой-то момент:

Джеймс вводит логин-пароль, они сохраняются в БД. Файл cookie с именем пользователя создается, шифруется и прикрепляется к ответу. Как я понимаю, когда мы получаем запрос, нам нужно распознать, что куки получены от Джеймса, и поэтому мы можем показать его настроенную страницу.

Что я хотел бы понять, так это то, как система будет извлекать cookie из имени пользователя и затем загружать его информацию из базы данных?

Ответы [ 3 ]

6 голосов
/ 17 января 2012

Forms Auth не зависит от хранилища.Он не должен использовать базу данных, на самом деле вы можете использовать его с именами пользователей и паролями в web.config .

Так что получается

  1. Aпользователь входит в систему.
  2. Пользователь проходит проверку подлинности с помощью поставщика членства (который может использовать SQL, Active DIrectory, web.config, Oracle, MySQL и т. д.)
  3. Токен проверки подлинности форм создан дляпользователь и помещается на пользовательский компьютер с помощью файла cookie.
  4. Каждый последующий запрос считывает токен проверки подлинности форм и запрашивает у поставщика информацию о пользователе.
  5. Используются данные пользователя.заполнить идентификатор пользователя в HttpContext и текущем потоке для запроса, который затем будет доступен вашему коду для использования.

В своем коде вы можете проверить свойство Пользователь вКласс страницы (WebForms) или свойство Пользователь в классе контроллера (MVC).

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

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

1 голос
/ 17 января 2012

Afaik Forms Authentication не сохраняет и не загружает ничего в любую базу данных.Вы можете использовать базу данных для хранения имени пользователя и пароля или поместить их в файл web.config.Как вы храните учетные данные пользователя и проверяете их, зависит от вас, и это может происходить отдельно от проверки подлинности с помощью форм.

После проверки пользователя (по базе данных или другому логическому хранилищу) вы используете FormsAuthentication для написания проверки подлинности.печенье.Вам не нужно беспокоиться о расшифровке куки.

Вы можете получить имя пользователя из System.Threading.Thread.CurrentPrincipal.Identity.Name.Чтобы получить информацию о пользователе из базы данных, вы должны запросить базу данных, используя значение, если имя основного идентификатора.

Ответ на комментарии

Правильно, вы можете использовать аутентификацию форм с поставщиком членства, активным каталогом или собственной пользовательской базой данных пользователей.FormsAuth не заботится о пароле вообще, если только он не хранится в web.config (как отмечено в более полном ответе blowdart).Он просто записывает файл cookie, который расшифровывается и используется для автоматического создания идентификатора потока.

Дополнительная информация

Несмотря на то, что это было помечено как ответ, ответ blowdart гораздо более полный.Вы действительно не должны получать удостоверение из потока, если вам это нужно на странице ASPX или контроллере MVC, используйте свойства, на которые он ссылался.

0 голосов
/ 17 января 2012

Вы получаете имя пользователя в своей веб-форме, вызывая User.Identity.Name, например, так:

protected void Page_Load(object sender, EventArgs e)
{
    string userName = User.Identity.Name;
}

ASP.NET интерпретирует cookie для вас, вам не нужно читать его самостоятельно,Или у вас вопрос, как хранить пользователя и пароль в БД?

...