У меня есть несколько веб-сайтов и приложений с собственными пулами приложений, использующих AppPoolIdentity. Удостоверения пула приложений хороши тем, что вы можете устанавливать разрешения файловой системы и добавлять пользователей SQL Server на их основе без необходимости управлять какими-либо паролями.
Моя настройка работала хорошо, пока не было решено, что на эти веб-сайты необходимо добавить базовую аутентификацию. Это было бы хорошо, но IIS абсолютно настаивает при использовании удостоверения, которое вы представляете, а не настроенного удостоверения пула приложений, независимо от любых параметров самого пула приложений.
Проблема, кажется, кроется в Connect As
диалог. Я настроил его использовать Application user (pass-through authentication)
. Не говоря уже о путанице в именовании, этот вариант для меня явно не сработает. Поэтому я пытаюсь использовать Specific user
вместо.
В Set Credentials
диалог является обманчивым, так как он принимает пользователя пула приложений формы IIS AppPool\[appPool]
без пароля, но когда вы заходите на сайт, вы получаете это сообщение об ошибке:
HTTP Error 500.19 - Internal Server
The requested page cannot be accessed because the related configuration data for the page is invalid.
Config Error: Can not log on locally to `[websitePath]` as user `IIS AppPool\[appPool]` with virtual directory password
Config File: `\\?\C:\inetpub\temp\apppools\[appPool]\[websiteName].config`
Config Source
153: `<application path="/" applicationPool="[appPool]">`
154: `<virtualDirectory path="/" physicalPath="[websitePath]" userName="IIS AppPool\[appPool]" />`
155: `</application>`
Это ссылка Microsoft на <virtualDirectory>
элемент. Открытие этого файла конфигурации ничего полезного не обнаруживает. Я пробовал добавить password=""
но безрезультатно.
Есть ли вообще способ достичь того, чего я пытаюсь достичь? В идеале без добавления модуля или другого специального кода на каждый сайт.
В итоге я решил свою проблему, создав урезанный пользовательский модуль на основе CustomBasicAuth и добавление его на уровне сервера (нет возможности настройки, поскольку добавление пользовательской конфигурации на уровне компьютера обременительно - вы не можете просто ссылаться на раздел конфигурации из сборки, как в файлах web.config). Это потребовало нацеливания на .NET 2.0, строгого именования сборки и добавления ее в GAC. Я изменил код, чтобы выполнять только аутентификацию, а не устанавливать участника-пользователя.