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

Столбец поддержки голосовой связи ASP .NET

Устранение неполадок с проверкой подлинности на основе форм

Добро пожаловать в столбец поддержки голосовых ASP.NET! Меня зовут Джерри Орман. Я работал с Корпорацией Майкрософт более 5 лет и большую часть своего времени занимался веб-технологиями, такими как Microsoft FrontPage и новые технологии Microsoft SharePoint. Последний год я работал с Microsoft ASP.NET в качестве инженера службы поддержки. В этом месяце в столбце Поддержка голосовой связи я собираюсь объяснить, как устранить неполадки с проверкой подлинности с помощью форм в Microsoft ASP.NET.

Устранение неполадок с проверкой подлинности на основе форм

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

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

Общие сведения о проверке подлинности с помощью форм

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

По умолчанию класс FormsAuthenticationModule добавляется в файл Machine.config. Класс FormsAuthenticationModule управляет процессом FormsAuthentication.

Ниже приведена запись из файла Machine.config:

<httpModule>
     …other modules…
     <add name="FormsAuthentication"
         type="System.Web.Security.FormsAuthenticationModule" />
     …other modules…
</httpModule>

Общий HTTP-трафик для проверки подлинности с помощью проверки подлинности на основе форм выглядит следующим образом:

  1. Клиент отправляет HTTP GET в Default.aspx. Файл cookie для проверки подлинности форм не отправляется.

  2. Сервер отправляет ответ 302 (перенаправление) в Login.aspx.

  3. Клиент отправляет запрос HTTP POST в Login.aspx. Он содержит сведения для входа.

  4. Сервер отправляет ответ 302 (перенаправление) в Default.aspx. Включается файл cookie проверки подлинности с помощью форм.

  5. Клиент отправляет HTTP GET в Default.aspx. Сюда входит файл cookie проверки подлинности форм.

Дополнительные сведения о реализации и использовании проверки подлинности с помощью форм см. на следующих веб-сайтах MSDN:

http://msdn2.microsoft.com/en-us/library/7t6b43z4.aspx

http://msdn2.microsoft.com/en-us/library/system.web.security.formsauthentication(vs.71).aspx

http://msdn2.microsoft.com/en-us/library/system.web.security.formsauthenticationticket(vs.71).aspxДополнительные сведения о совместном использовании файлов cookie проверки подлинности форм см. на следующем веб-сайте ASP.NET:

http://quickstarts.asp.net/QuickStartv20/aspnet/doc/security/formsauth.aspx

Причины перенаправления пользователя на страницу входа

Файл cookie проверки подлинности с помощью форм потерян

Сценарий 1


В этом сценарии пользователь входит на веб-сайт. В какой-то момент клиент отправляет запрос на сервер, и
Класс FormsAuthenticationModule не получает файл cookie. Вы можете определить, не содержит ли запрос пользователя файл cookie, включив вход файлов cookie в Microsoft IIS (IIS). Для этого выполните следующие действия:

  1. Откройте консоль управления (MMC) IIS.

  2. Щелкните правой кнопкой мыши веб-сайт и выберите пункт
    Свойства.

  3. Перейдите на вкладку Веб-сайт и щелкните Включить ведение журнала.

  4. Убедитесь, что формат журнала имеет формат расширенного файла журнала W3C.

  5. Выберите пункт Свойства.

  6. Перейдите на вкладку Дополнительно , а затем щелкните
    Расширенные свойства.

  7. В разделе Расширенные свойства щелкните, чтобы выбрать проверка Cookie(cs(Cookie)) и проверка в поле Referer (cs(Referer)).

После возникновения этой проблемы определите, у какого клиента возникла проблема и ip-адрес этого клиента. Отфильтруйте журнал IIS по IP-адресу этого клиента и просмотрите столбец> файла cookie <.

Примечание. Для синтаксического анализа журналов IIS можно использовать средство синтаксического анализа. Чтобы скачать средство синтаксического анализа журналов, посетите следующий веб-сайт Майкрософт:

http://www.microsoft.com/download/details.aspx?FamilyID=890cd06b-abf8-4c25-91b2-f8d975cf8c07 Получив список запросов от этого конкретного пользователя, найдите запросы на странице входа. Вы знаете, что они были перенаправлены на эту страницу, и вы хотите просмотреть запросы до того, как произошло перенаправление. Если вы видите что-то похожее на следующее, клиент либо не отправил файл cookie, либо файл cookie был удален в сети между клиентом и сервером.

Это начальное имя входа.

Способ

Страницы

Ответ

Файлы сookie

ПОЛУЧИТЬ

/Default.aspx

302 (перенаправление)

Нет файлов cookie

ПОЛУЧИТЬ

/Login.aspx

200 (успешно)

Нет файлов cookie

ПОМЕСТИТЬ

/Login.aspx

302 (перенаправление)

Нет файлов cookie

ПОЛУЧИТЬ

/Default.aspx

200 (успешно)

. ASPXAUTH

ПОЛУЧИТЬ

/SomePage.aspx

302 (перенаправление)

Нет. ASPXAUTH Cookie

Это другие запросы, за которыми следует запрос на страницу на сайте без . Файл cookie ASPXAUTH.

Способ

Страницы

Ответ

Файлы сookie

ПОЛУЧИТЬ

/SomePage.aspx

302 (перенаправление)

Нет. ASPXAUTH Cookie

ПОЛУЧИТЬ

/Login.aspx

200 (успешно)

Нет. ASPXAUTH Cookie

ПОМЕСТИТЬ

/Login.aspx

302 (перенаправление)

Нет. ASPXAUTH Cookie

ПОЛУЧИТЬ

/SomePage.aspx

200 (успешно)

. ASPXAUTH


Примечание. Первый запрос от этого пользователя, скорее всего, не будет иметь файл cookie проверки подлинности на основе форм, если вы не создаете постоянный файл cookie. В журнале IIS отображаются только файлы cookie, полученные в запросе. Первый запрос на получение файла cookie проверки подлинности форм будет выполнен в запросе после успешной попытки входа.

Сценарий 2


Файл cookie проверки подлинности с помощью форм также может быть потерян при превышении лимита файлов cookie клиента. В Microsoft Internet Обозреватель существует ограничение в 20 файлов cookie. После создания 20-го файла cookie на клиенте предыдущие файлы cookie удаляются из коллекции клиента. Если значение . Файл cookie ASPXAUTH удаляется, пользователь будет перенаправлен на страницу входа при обработке следующего запроса.

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

Fiddler можно использовать для просмотра заголовков HTTP, отправляемых клиенту. После записи трафика дважды щелкните запрос и щелкните Заголовки , чтобы просмотреть заголовок Set-Cookie. При трассировке успешного входа вы увидите заголовок Set-Cookie в ответе на успешное имя входа.

Чтобы скачать Fiddler, посетите следующий веб-сайт Fiddler:

http://www.fiddlertool.com/fiddler/

Сценарий 3


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

Запрос

клиента Это запрос GET после проверки подлинности пользователя. Сведения о билете проверки подлинности в формах выделены синим цветом. Это подтверждает, что сведения о файлах cookie покинули клиент. При использовании средства отслеживания сети, например Netmon, вы увидите трафик, который фактически проходил через адаптер.

47 45 54 20 68 74 74 70-3a 2f 2f 6c 6f 63 61 6c   GET http://local
68 6f 73 74 2f 46 6f 72-6d 73 41 75 74 68 4c 6f   host/FormsAuthLo
67 54 65 73 74 2f 57 65-62 46 6f 72 6d 31 2e 61   gTest/WebForm1.a
73 70 78 20 48 54 54 50-2f 31 2e 31 0d 0a 41 63   spx HTTP/1.1..Ac
63 65 70 74 3a 20 69 6d-61 67 65 2f 67 69 66 2c   cept: image/gif,
…Other headers of the GET request…
63 68 65 0d 0a 43 6f 6f-6b 69 65 3a 20 2e 41 53   che..Cookie: .AS
50 58 41 55 54 48 3d 33-43 45 46 39 42 39 41 30   PXAUTH=3CEF9B9A0
43 33 37 41 44 46 36 33-45 36 42 44 33 37 42 36   C37ADF63E6BD37B6
39 43 44 41 32 35 30 30-30 46 38 30 37 32 38 46   9CDA25000F80728F
35 31 43 39 35 36 36 44-31 34 43 35 34 31 34 35   51C9566D14C54145
38 31 43 39 33 45 32 41-30 31 44 44 43 44 45 46   81C93E2A01DDCDEF
32 34 41 31 37 34 32 39-34 31 30 43 30 39 37 34   24A17429410C0974
42 33 45 43 42 30 36 34-32 32 38 45 33 35 33 39   B3ECB064228E3539
39 41 38 32 32 42 33 42-39 33 36 44 46 30 38 46   9A822B3B936DF08F
42 41 42 44 33 45 31 30-32 44 30 30 32 31 30 43   BABD3E102D00210C
32 45 31 33 39 38 30 37-39 42 32 33 35 32 39 46   2E1398079B23529F
34 46 35 44 37 34 41 3b-20 50 72 6f 66 69 6c 65   4F5D74A; Profile
3d 56 69 73 69 74 6f 72-49 64 3d 62 32 34 65 62   =VisitorId=b24eb

Запрос

на стороне сервера При просмотре запроса, который достиг сервера, необходимо убедиться, что сервер получил те же сведения, что и клиент. Если сервер не получил те же сведения, необходимо изучить другие устройства в сети, чтобы определить, где был удален файл cookie.

Примечание. Существуют также экземпляры фильтров ISAPI, удаляющие файлы cookie. Если вы подтвердите, что веб-сервер получил файл cookie, но файл cookie не указан в журналах IIS, проверка фильтры ISAPI. Возможно, потребуется удалить фильтры, чтобы узнать, устранена ли проблема.

Время ожидания билета проверки подлинности с помощью форм истекает

Другой распространенной причиной перенаправления пользователя является истечение срока действия билета проверки подлинности с помощью форм. Время ожидания билета проверки подлинности с помощью форм может быть истекает двумя способами. Первый сценарий возникает, если используется абсолютный срок действия. При абсолютном истечении срока действия билет проверки подлинности истечет по истечении срока действия. Например, вы устанавливаете срок действия в 20 минут, а пользователь посещает сайт в 14:00. Пользователь будет перенаправлен на страницу входа, если пользователь посещает сайт после 14:20.

Если вы используете скользящий срок действия, сценарий немного сложнее. Файл cookie и полученный билет обновляются, если пользователь посещает сайт по истечении половины срока действия. Например, вы устанавливаете срок действия в 20 минут с помощью скользящего срока действия. Пользователь посещает сайт в 14:00, и пользователь получает файл cookie, срок действия которого истекает в 14:20. Срок действия обновляется, только если пользователь посещает сайт после 14:10. Если пользователь посещает сайт в 14:09, билет не обновляется, так как половина срока действия не прошла. Если пользователь подождит 12 минут, посетив сайт в 14:21, срок действия билета истекает. Пользователь перенаправляется на страницу входа.

Одним из способов решения этой проблемы является регистрация файлов cookie проверки подлинности на основе форм и сведений о билетах. Таким образом, вы сможете узнать, был ли файл cookie получен службами IIS и каковы значения. Это можно сделать, написав httpModule, а затем подключив этот модуль к конвейеру запросов. Вам не придется изменять код приложения, чтобы получить необходимые сведения.

Вложенный пример работает в Microsoft платформа .NET Framework 1.1 и платформа .NET Framework 2.0 и содержит комментарии во всем. Пример включает следующие файлы:

  • FormsAuthEvents.cs: класс, реализующий IHttpModule и связывающий с событием Application_BeginRequest.

  • FormsAuthInfo.cs: класс, который извлекает файл cookie и расшифровывает билет проверки подлинности форм. Он также проверяет файл Web.config приложения, чтобы убедиться, что проверка подлинности на основе форм включена.

  • FormsAuthConfig.cs: класс, считывающий сведения из файла FormsAuthLogger.config.

  • Log.cs: файл, который принимает stringbuilder и записывает значения в файл журнала.

  • FormsAuthLogger.config: XML-файл, считываемый файлом Log.cs. Этот файл должен находиться в папке /bin с встроенной библиотекой DLL. Файл позволяет настроить следующее:

    • Фильтрация по IP-адресу. Вы можете фильтровать данные по IP-адресу клиента. Таким образом, можно регистрировать только запросы от клиента, который, как известно, воспроизводит проблему. Это уменьшает размер журнала.

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

Обратите внимание, что я предоставлю ссылку для скачивания кода, указанного в файле FormsAuthLogger.zip.

Я отмечу здесь main области:

  1. Создайте класс, реализующий интерфейс IHttpModule.

    public class FormsAuthEvents : IHttpModule 
    {
    …code…
    }
  2. Подключите событие, которое вы хотите просмотреть. В этом примере мы используем событие Application_BeginRequest. Таким образом, мы можем исследовать каждый запрос и определить, содержит ли он файл cookie проверки подлинности форм, и записать в журнал FormsAuthenticationTicket, если файл cookie существует.

    public void Init(HttpApplication application) 
    {
    //Wire up the BeginRequest event
    application.BeginRequest += (new EventHandler(this.Application_BeginRequest));
    }
  3. Реализуйте событие Application_BeginRequest.

    private void Application_BeginRequest(Object source, EventArgs e)
    {
       …code to log the ticket…
    }
    
  4. Получите файл cookie проверки подлинности форм, а затем расшифруйте его.

  5. Зайдите в журнал значений. Я бы рекомендовал ведения журнала в дополнение к информации о формах. Это поможет вам при необходимости выстраивать сведения о проверке подлинности форм в журналы IIS:

    • Дата: позволяет узнать, когда поступил запрос.

    • RequestType: показывает, является ли запрос get или post.

    • URL-адрес: отображает шаблон запросов, которые приводят к проблеме.

    • Реферер

    • ClientIP: связывает запросы с определенным клиентом.

Нужна дополнительная помощь?

Нужны дополнительные параметры?

Изучите преимущества подписки, просмотрите учебные курсы, узнайте, как защитить свое устройство и т. д.

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

Были ли сведения полезными?

Насколько вы удовлетворены качеством перевода?
Что повлияло на вашу оценку?
После нажатия кнопки "Отправить" ваш отзыв будет использован для улучшения продуктов и служб Майкрософт. Эти данные будут доступны для сбора ИТ-администратору. Заявление о конфиденциальности.

Спасибо за ваш отзыв!

×