401 - Несанкционированный на сервере 2008 R2 IIS 7.5


20

У меня есть веб-приложение, развернутое на сервере Server 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, работающие нормально на том же сервере. Я проверил безопасность папок, и все они совпадают.

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

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

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

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

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

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

ОБНОВЛЕНИЕ № 3 Играя с отслеживанием невыполненных запросов, вот трассировка ПРЕДУПРЕЖДЕНИЯ, которая вызывает 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

Вы пытались запустить Failed Request Tracing на сервере и получить доступ к приложению с удаленного компьютера. Если есть сбой, вы должны увидеть причину.
Вивек Кумбхар

@vivek смотрите мое последнее обновление
mxmissile

ARRG !!! Получил, но этим снова! На поиски ушло 2 часа Html.RenderAction, потом понял, что использует Razor, Html.Actionпоэтому мои начальные поиски оказались пустыми.
mxmissile

О, это было пару лет, угадайте что? Просто потратил впустую 3 часа этим утром СНОВА! Когда я буду учиться?!?!?!
mxmissile

Ответы:


19

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


1
Это была моя проблема, это было достаточно неприятно, чтобы ударить панду (не то, что я буду). Спасибо, mxmissile.
Халид Абухакмех

4

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

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

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


4

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


4

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

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

2

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

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

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


1
Разрешить - Все пользователи - Наследуется
mxmissile
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.