Сайт интрасети ASP.NET MVC 3 на IIS7.5 с аутентификацией Windows выдает 401,3, и авторизация файла не удалась для запроса при попытке войти в систему - PullRequest
9 голосов
/ 21 февраля 2012

Я сделал сайт интрасети ASP.NET MVC 3 с включенной аутентификацией Windows:

  1. в свойствах файла проекта Visual Studio
  2. в web.config, т.е. <authentication mode="Windows"/>
  3. на свойствах сайта в IIS 7.5. Сервер

Анонимный доступ отключен для всех этих трех выше, web.config говорит <deny users="?"/>. Олицетворение отключено в файле web.config с идентификатором <impersonate="false"/> и в свойствах сайта на сервере IIS 7.5. И, наконец, NETWORK SERVICE настроен для запуска пула приложений, а также имеет папку «Читать в папке сайта» (хотя вы не уверены, нужна ли она вам, вы говорите мне, но этого недостаточно для решения моей проблемы ниже).

Теперь при входе в систему через стандартное диалоговое окно Аутентификация Windows пользователям домена выдается ошибка 401.3 после трех действительных попыток входа в систему. Кажется, это происходит еще до того, как я получил код моего сайта MVC, то есть он полностью связан с IIS. Журнал событий предоставляет следующий вид записи (это информационная запись, а не ошибка, и я немного запутал ее для защиты своего клиента) для всех пользователей, которые пытались войти в систему:

Event code: 4008
Event message: File authorization failed for the request.
Event time: 2012-02-20 18:45:41
Event time (UTC): 2012-02-20 17:45:41
Event ID: 6dd3b4bf99784ba1a0fe06694dd89691
Event sequence: 3
Event occurrence: 1
Event detail code: 0
Application information:
Application domain: /LM/W3SVC/2/ROOT-1-129742335229554599
Trust level: Full
Application Virtual Path: /
Application Path: D:\Public\BlahblahManager\
Machine name: HUB01-XYZ123
Process information:
Process ID: 2920
Process name: w3wp.exe
Account name: NT AUTHORITY\NETWORK SERVICE
Request information:
Request URL: http://blahblahmanager.user.ad.blah.com/
Request path: /
User host address: 134.XXX.XXX.XXX
User: USER-AD\teh-user
Is authenticated: True
Authentication Type: Negotiate
Thread account name: NT AUTHORITY\NETWORK SERVICE
Custom event details:

Только когда я специально предоставляю USER-AD\teh-user или USER-AD\Domain пользователям разрешение Read на корневую папку сайта (D: \ Public \ BlahblahManager), пользователь может войти в систему и фактически увидеть сайт.

Почему это? Там должна быть какая-то конфигурация, которую я пропускаю. Разве этого не должно быть достаточно, чтобы СЕТЬ СЕТИ имела Чтение в корневой папке сайта? Я гуглил это некоторое время, и тут и там упоминается подражание, но суд присяжных все еще отсутствует. Некоторые сайты утверждают, что вы должны использовать олицетворение, и они предоставляют примеры того, как это сделать, но когда я пробую примеры, это все равно не работает. На других сайтах говорится, что олицетворение - это НЕ ПУТЬ, и вам НУЖНО предоставить разрешения для папок в этих случаях. Но это кажется странной вещью. Пользователи не имеют бизнеса на реальном сервере, они должны работать только через веб-сайт.

Есть предложения? Какой минимальный объем конфигурации необходим для работы? Любые советы о том, как устранить проблему такого рода и найти причину?

Ответы [ 5 ]

2 голосов
/ 22 декабря 2012

Я рекомендую вам увидеть этот пост , который объявляет все методы аутентификации MVC.но убедитесь, что в вашем приложении mvc включена минимальная необходимая аутентификация.Обратите внимание, что анонимная аутентификация работает с вашими групповыми политиками.Вы можете настроить это следующим образом: Свойства обозревателя -> Вкладка «Безопасность» -> Локальная интрасеть -> Пользовательский уровень в браузере.

1- Еще одна проблема, которая может вызвать проблему, - IIS может быть настроен не для авторизованных связанных пользователей.Вот некоторые из них:

  • iisservice
  • IUSR
  • IIS_IUSRS
  • Сетевая служба

2- Также проверьтеразрешенные глаголы в IIS.

3- В корневой папке вашего приложения. Предоставьте доступ на чтение IIS AppPool \ YourAppPool.

4- Еще одной причиной могут быть правила иерархического доступа в вашем приложении.используемые вами прикладные службы, например, правила доступа к панели веб-сайта.

5- Настройка файла clientaccesspolicy.xml.

6 - Проверьте метод InitializeService ().правильно установить правила доступа к объектам?Например:

config.SetEntitySetAccessRule("*", EntitySetRights.All);

7 - Проверьте модуль FileAuthentication на уровне веб-сайта.

1 голос
/ 21 февраля 2012

Двойная проверка Анонимная аутентификация включена в IIS. Также посмотрите этот пост.

0 голосов
/ 16 июля 2015

От вас не требуется предоставлять права доступа к файлу при использовании проверки подлинности Windows в IIS 7.0 и IIS 7.5.

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

Для тех, кто имеет дело с этой проблемой или если вы настраиваете новый сервер IIS7 / IIS7.5 и / или переходите с IIS 6, вот статья, в которой представлены все параметры и конфигурации проверки подлинности Windows, которые необходимо изменен, чтобы избежать предоставления доступа на уровне файлов отдельным лицам или группам.

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

http://weblogs.asp.net/owscott/iis-using-windows-authentication-with-minimal-permissions-granted-to-disk

В дополнение к информации в статье, имейте в виду, что IIS 7.5 не использует теги веб-конфигурации для system.web (по крайней мере, в моем приложении MVC 4).

Он ищет в тегах system.webserver конфигурацию авторизации (где вам нужно будет перечислить домен / группы windows, в которых должен находиться пользователь для доступа к вашему приложению).

- DSB

0 голосов
/ 13 марта 2014

Я также сталкивался с такой же проблемой на iis7 с аутентификацией Windows, но с MVC4. Наконец нашел этот пост . Надеюсь, это поможет кому-то в будущем.

0 голосов
/ 24 июля 2013

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

Существует два параметра IIS, которые управляют этим:

Учетные данные физического пути Учетные данные физического пути Тип входа

По умолчанию физическийУчетные данные пути имеют значение «Пользователь приложения» (сквозная аутентификация).Это означает, что IIS не выполняет олицетворение при обработке запросов проверки подлинности Windows.Однако это может быть установлено для конкретного пользователя (хотя, к сожалению, это не идентификация пула приложений, что было бы идеально).Учетные данные физического пути Тип входа по умолчанию установлен как «Открытый текст».Для моего тестирования я установил интерактивное значение (хотя это может быть неправильным значением).Возможные значения: Открытый текст, Пакет, Интерактив и Сеть.

Чтобы настроить это, я сделал следующее:

  1. Создание локальной учетной записи (IIS-AccessUser)
  2. Предоставлен доступ IIS-AccessUser для чтения и выполнения к каталогу / home сайта.
  3. Добавлен IIS-AccessUser в группу IIS_IUSRS (необходим для доступа к временным файлам .NET)
  4. Установить IIS-AccessUser в качестве учетных данных физического пути
  5. Установить тип входа для учетных данных физического пути в Интерактивный

Выполнение вышеизложенного позволило мне войти в приложение напрямую, без необходимости авторизованных пользователей,или я должен быть членом какой-либо из групп в папке / home.В ней также сохранялись роли авторизации .NET, поэтому я все еще не мог получить доступ к тем частям сайта, к которым мне не разрешали.

...