Назад | Перейти на главную страницу

401 - Неавторизован на сервере 2008 R2 IIS 7.5

У меня есть веб-приложение, развернутое на сервере 2008 IIS 7.5.

С пульта дистанционного управления выдает эту ошибку: 401 - Unauthorized: Access is denied due to invalid credentials. (удаленный = рабочие столы в одной локальной сети)

Пробовали несколько удаленных клиентов с использованием разных браузеров, все тот же результат. (IE, FF и Chrome)

Запуск приложения из рабочий стол самого сервера работает безупречно. Однако я не пробовал Firebug на рабочем столе сервера. Я предполагаю, что он все еще выдает код состояния 401, но все равно возвращает контент. См. Обновление №2.

Приложение использует анонимную аутентификацию.

Приложение написано на .NET 4.0 Asp.Net с использованием инфраструктуры MVC.

Статический контент работает нормально, например: http://server.com/content/image.jpg

Sysinternals procmon возвращает эти 2 результата для каждого запроса: FAST IO DISALLOWED и PATH NOT FOUND.

У меня есть 2 других приложения MVC, которые отлично работают на том же сервере. Я проверил безопасность папок, и все они совпадают.

Приложение отлично работает на сервере 2008 IIS 7.0.

В журнале событий на сервере ничего не отображается, связанного с этим.

Вытаскиваю здесь волосы, какие-нибудь советы по устранению неполадок?

ОБНОВЛЕНИЕ # 1: Это просто больше WTF, пока я копаю.

Если я щелкну приложение в диспетчере IIS -> Страницы ошибок -> Изменить параметры функции, выберите Detailed Errors, приложение работает удаленно. Не оставлять это включенным, значит, проблема еще не решена, это еще больше сбивает с толку.

ОБНОВЛЕНИЕ # 2: Используя Firebug, я вижу, что статус все еще 401 Unauthorized, но ответ возвращает правильный HTML-код приложения.

ОБНОВЛЕНИЕ # 3 Поиграйте с трассировкой неудачных запросов, вот трассировка запроса WARNING, которая вызывает ошибку 401:

ModuleName ManagedPipelineHandler
Notification 128
HttpStatus 401 
HttpReason Unauthorized 
HttpSubStatus 0 
ErrorCode 0 
ConfigExceptionInfo  
Notification EXECUTE_REQUEST_HANDLER 
ErrorCode The operation completed successfully. (0x0)

Обновление # 4 Обычный журнал IIS показывает это:

#Software: Microsoft Internet Information Services 7.5
#Version: 1.0
#Date: 2010-07-20 19:17:22
#Fields: date time s-ip cs-method cs-uri-stem cs-uri-query s-port cs-username c-ip cs(User-Agent) sc-status sc-substatus sc-win32-status time-taken
2010-07-20 19:17:22 10.10.1.10 GET /Purchasing/Home - 80 - 10.10.1.12 Mozilla/5.0+(Windows;+U;+Windows+NT+6.1;+en-US;+rv:1.9.2.6)+Gecko/20100625+Firefox/3.6.6 401 0 0 4414

Иногда нужно сделать шаг назад ... Причина в том, что у меня Html.RenderAction() на мой взгляд, это вызвало метод действия, который был отмечен [Authorize] атрибут.

Поскольку он работает локально, но не удаленно, мне кажется, что учетная запись анонимного пользователя не имеет доступа к чему-либо, но ваш пользователь Windows имеет. Чтобы доказать это, отключите проверку подлинности Windows для веб-сайта и посмотрите, не работает ли он локально.

Все, что ломается, скорее всего, работает как идентификатор вашего веб-сайта, а не как пул приложений, иначе он сломается локально или удаленно. Моя рекомендация, если у вас есть сопоставления сайтов 1 к 1 пулам приложений или у вас есть высоконадежная среда, - настроить анонимную учетную запись пользователя на использование удостоверения пула приложений. Тогда вам не нужно беспокоиться о втором пользователе.

Вы упомянули проводник процессов. Это хорошо для поиска рабочей информации, но инструмент, который, вероятно, обнаружит ошибки отказа в доступе, - это processmon (также из sysinternals). Попробуйте, воспроизведите и запечатлейте, а затем введите слово «отказано». Он должен выявить любые проблемы с отказом в доступе на диске.

У вас будет такое же поведение, если у вас есть фильтр для настраиваемой авторизации, который наследуется от AuthorizeAttribute и один или несколько вызовов OnAuthorization метод, один из которых устанавливает AuthorizationContext.Result в `HttpUnauthorizedResult '

По какой-то причине это устранило мою проблему.

  1. Щелкните сайт в IIS.
  2. Проверка подлинности двойным щелчком
  3. Щелкните правой кнопкой мыши и выберите Дополнительные настройки.
  4. Снимите флажок «Включить проверку подлинности в режиме ядра».

Вы проверяли настройки в правилах авторизации? Если кто-либо может получить доступ к этой странице (что, по-видимому, является вашей целью), убедитесь, что у вас есть правило «Разрешить», в котором в столбце «Пользователи» указано «Все пользователи».

Затем в «Аутентификации» убедитесь, что нет конфликтов и включена только анонимная аутентификация.

Надеюсь, это поможет.