У меня есть веб-приложение, развернутое на сервере 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 '
По какой-то причине это устранило мою проблему.
Вы проверяли настройки в правилах авторизации? Если кто-либо может получить доступ к этой странице (что, по-видимому, является вашей целью), убедитесь, что у вас есть правило «Разрешить», в котором в столбце «Пользователи» указано «Все пользователи».
Затем в «Аутентификации» убедитесь, что нет конфликтов и включена только анонимная аутентификация.
Надеюсь, это поможет.