Обычно при настройке IIS 7 я разрешал пользователю IIS APPPOOL \ {имя пула приложений} в корневой папке моих веб-приложений. Я также даю разрешения IUSR (или группе пользователей IIS_IUSRS. (Обратите внимание, что в Windows Server 2008 я обнаружил, что IUSR не входит в эту группу по умолчанию, поэтому я добавил его).
В Windows Server 2008 я не могу найти пользователя IIS APPPOOL \ {имя пула приложений} под Безопасность в папке Windows Свойства. Я использую проверку подлинности Windows в ASP.NET. Я получаю 401.1 на странице в Internet Explorer 8 после получения запроса на аутентификацию. Mozilla Firefox также выдал мне запрос на аутентификацию Windows и отлично помог мне попасть на сайт. То же самое и с Google Chrome.
Как я могу решить эту проблему?
Ошибка HTTP 401.1 - неавторизованный. У вас нет разрешения на просмотр этого каталога или страницы с использованием предоставленных вами учетных данных.
Конкретная информация о странице:
Module: WindowsAuthenticationModule
Notification: AuthenticateRequest
Handler: PageHandlerFactory-ISAPI-4.0_32bit
Error Code: 0x8009030e
Requested URL: http://.....aspx
Physical Path: C:\.........aspx
Logon Method: Not yet determined
Logon User: Not yet determined
Скорее всего, это связано с тем, что IE будет использовать ваши аутентифицированные учетные данные, а не анонимную учетную запись пользователя. Если ваш аутентифицированный пользователь не имеет доступа, он завершится ошибкой. Одно из решений - добавить аутентифицированного пользователя в корневую папку сайта. В IE ваши учетные данные, которые вы используете в сети, будут передаваться на сайт, но в других браузерах он запросит новый набор учетных данных.
Ваша ссылка в третьем комментарии звучит как хороший зацеп. Вы пытались отключить Negotiate и посмотреть, что произойдет? Также неплохо изменить доверенные зоны и зоны интрасети в 4-м канале.
Кстати, в Windows Server 2008 IIS_IUSRS обрабатывается практически "на лету", поэтому добавление IUSRS ничему не повредит, но и не нужно.
Это краткое описание заставило меня понять и прояснить для меня предмет.
Учетные записи удостоверений пула приложений
Рабочие процессы в IIS 6.0 и IIS 7 по умолчанию выполняются как сетевая служба. Сетевая служба - это встроенная идентификация Windows. Он не требует пароля и имеет только права пользователя; то есть он относительно низкоприоритетный. Запуск в качестве учетной записи с низким уровнем привилегий является хорошей практикой безопасности, поскольку в этом случае злоумышленник не может использовать программную ошибку для захвата всей системы.
Однако со временем возникла проблема, поскольку все больше и больше системных служб Windows начали работать как сетевые службы. Это связано с тем, что службы, работающие как сетевая служба, могут вмешиваться в работу других служб, работающих под тем же идентификатором. Поскольку рабочие процессы IIS по умолчанию запускают сторонний код (классический код ASP, ASP.NET, PHP), пришло время изолировать рабочие процессы IIS от других системных служб Windows и запустить рабочие процессы IIS с уникальными идентификаторами. Операционная система Windows предоставляет функцию, называемую «виртуальные учетные записи», которая позволяет IIS создавать уникальные удостоверения для каждого из своих пулов приложений. Щелкните здесь для получения дополнительной информации о Виртуальные счета.
Настройка удостоверений пула приложений IIS
Если вы используете IIS 7.5 в Windows Server 2008 R2 или более поздней версии IIS, вам не нужно ничего делать для использования нового удостоверения. Для каждого создаваемого пула приложений для свойства Identity нового пула приложений по умолчанию установлено значение ApplicationPoolIdentity. Процесс администрирования IIS (WAS) создаст виртуальную учетную запись с именем нового пула приложений и по умолчанию будет запускать рабочие процессы пула приложений под этой учетной записью.
Чтобы использовать эту виртуальную учетную запись при запуске IIS 7.0 на Windows Server 2008, необходимо изменить свойство Identity создаваемого пула приложений на ApplicationPoolIdentity. Вот как:
Чтобы сделать тот же шаг с помощью командной строки, вы можете вызвать инструмент командной строки appcmd следующим образом:
%windir%\system32\inetsrv\appcmd.exe set AppPool <your AppPool> -processModel.identityType:ApplicationPoolIdentity
Полную версию документа можно прочитать по адресу: Удостоверения пула приложений
У меня была такая же проблема в Server 2012 - по какой-то причине виртуальные учетные записи не создавались (или они были недоступны для использования). - Я считаю, что это связано с AppHostSvc
или NetMan
служба не работает. - В конечном счете, я использовал дробный подход к его исправлению (не рекомендуется, постарайтесь сделать как можно меньше для производственной среды, но этот PowerShell может вывести вас из трудной ситуации в вашей среде разработки):
#Requires -Version 4
#Requires -RunAsAdministrator
#######################################
$DebugPreference = "SilentlyContinue";
$VerbosePreference = "SilentlyContinue";
$WarningPreference = "Continue";
$ErrorActionPreference = "Stop";
Set-PSDebug -Strict;
Set-StrictMode -Version 3;
#######################################
Get-WindowsOptionalFeature -Online `
| where { $_.FeatureName -ilike "*IIS*" -and $_.State -eq "Disabled" } `
| % { Enable-WindowsOptionalFeature -Online -FeatureName $_.FeatureName -All };
iisreset
Get-Service | ? { $_.ServiceName -eq "W3SVC" } | Start-Service;
Get-Service | ? { $_.ServiceName -eq "W3SVC" } | Set-Service -StartupType Automatic;
Get-Service | ? { $_.ServiceName -eq "WMSvc" } | Start-Service;
Get-Service | ? { $_.ServiceName -eq "WMSVC" } | Set-Service -StartupType Automatic;
Get-Service | ? { $_.ServiceName -eq "AppHostSvc" } | Start-Service;
Get-Service | ? { $_.ServiceName -eq "AppHostSvc" } | Set-Service -StartupType Automatic;
Get-Service | ? { $_.ServiceName -eq "Netman" } | Start-Service;
Get-Service | ? { $_.ServiceName -eq "Netman" } | Set-Service -StartupType Automatic;
iisreset