Я создал приложение ASP.Net C # MVC с «Индивидуальной учетной записью пользователя» для аутентификации + localDB. Я запустил приложение в Visual Studio с IIS Express на localhost, зарегистрировал пользователя и вошел в систему с этим пользователем.
Я пытаюсь понять, как серверная часть знает, что пользователь вошел в систему в следующем сценарии:
- запустите приложение iis express & в визуальной студии
- авторизоваться
- остановите приложение iis express & в визуальной студии
- снова запустите приложение iis express & в визуальной студии
- пользователь все еще вошел в систему (ПОЧЕМУ ???)
Я проверил пользовательские таблицы в БД и не смог найти ни одного поля, указывающего на вошедшего в систему пользователя. Я думаю, остановка и перезапуск iis express должен также очистить все в фоновом режиме.
Так как же бэкэнд узнал, что пользователь вошел в систему на шаге 5 выше ??
Я нашел следующий файл cookie в запросе http
Cookie: _ga = GA1.1.1546797954.1551225891; __RequestVerificationToken = PSFeb9iP4aZr3wxxb8nJNKtki_1XPTzGO1Hzaf0W3iDsSCnV_qCfMsC9TY980X51c2rANZA - zureu6UHKEssAHza58AdmQUdZVL98VGYlRc1 ; .AspNet.ApplicationCookie = VUPznoprBRK2z13u03ArrC9HLHeGGUyTSvu9rYpSnZju_Rz4X2V5n9faw0EhnmuFjVN1AIva7HZSAhUBeSZ5jQHSej6XaAExy0hkwF_9vC190LfWBPP - oH3Zp0jj0ZmZ7L3sLlLqux4HV5CZSA - jqhDF4IXAFKyisFFV136PlxrJTmb9OXRrmo9rigCiIy0z_oixDlg1eHVI3T6ptVgn1Qhohtr1mTqoBJsF7gi7CHymSBlyFJ5MgYxfPcWNhJnj3H - WWK1ijkfzxsm0R13m2_6IbIiK1y5uzQBkklb8oMuz0mD27GlwMzteQBP3VLOXn77BreOPefJ8_2AekYjFGjgBIGGpngxLVzDneT4rC - BDiVKdWO_FRuail4ivVAN2ZJtdjK0uEPqnln5rmOlT0MLAhYzHMkk - HTvtW - XO- Kexinlh58uxz0E7bncY5I6troc19E0fBLMnfXThtaL7ur6CN4pqUyq4yALJCTHszG3RPLQoJja0u1g34i - mKunZ
2 ответа
В веб-разработке есть очень базовая концепция, называемая cookie. Cookie отвечает также за хранение информации о пользователе в браузере. Когда вы входите в систему членства, в ответ добавляется специальный заголовок Set-Cookie
, который затем сохраняется в кэше браузера. Информация, отправляемая через заголовок, содержит информацию о зарегистрированном пользователе. С последующими запросами браузер отправляет тот же файл cookie на сервер, и система членства анализирует эту информацию, чтобы идентифицировать пользователя, который делает запрос, и если информация действительна, вы вошли в систему, и система идентифицирует вас.
РЕДАКТИРОВАТЬ : Детали выполняемых операций не уникальны и зависят от того, какую библиотеку вы используете для аутентификации, но если вы используете систему аутентификации по умолчанию asp.net, вы можете посмотреть, как все делается в исходном коде. Для проверки ASP.NET CORE
https://github.com/aspnet/AspNetIdentity и для ASP.NET MVC
проверки: https://github.com/aspnet/Identity
Вот как работает аутентификация в ASP.NET MVC
- Введите имя пользователя и пароль в форму входа и нажмите кнопку «Войти»
- При нажатии кнопки «Вход» серверный код проверяет, существуют ли введенные имя пользователя и пароль в базе данных.
- Если введенные имя пользователя и пароль существуют в базе данных, то код на стороне сервера создает cookie и сохраняет их в браузере (не в базе данных)
- На каждом запросе страницы IIS проверяет, существует ли файл cookie аутентификации или нет.
- Если cookie существует, то пользователь вошел в систему, а если cookie не существует, пользователь не вошел
Поскольку аутентификационный cookie хранится в браузере, а не в IIS. Остановка и запуск IIS не влияет на состояние входа пользователя.
Чтобы ответить на ваш конкретный вопрос: как бэкэнд узнал, что пользователь вошел в систему на шаге 5 выше? Ответ: При каждом запросе страницы от IIS. Наряду с другой информацией, куки-файл аутентификации, хранящийся в браузере, отправляется на сервер / IIS. Затем back-end / IIS проверяет, является ли файл cookie аутентификации действительным. Если cookie-файл является действительным, сервер / IIS знает, что пользователь вошел в систему. Если cookie-файл является недействительным, сервер / IIS знает, что пользователь не вошел в систему.
Чтобы понять этот процесс дальше. Я бы рекомендовал сначала прочитать о файлах cookie, а затем прочитать об аутентификации в ASP.NET.
Надеюсь это поможет!
Новые вопросы
c#
C # (произносится как «резкий») - это высокоуровневый, статически типизированный язык программирования с несколькими парадигмами, разработанный Microsoft. Код C # обычно нацелен на семейство инструментов и сред выполнения Microsoft .NET, включая, среди прочего, .NET Framework, .NET Core и Xamarin. Используйте этот тег для вопросов о коде, написанном на C # или в формальной спецификации C #.