После развертывания новой версии нашего приложения ASP.NET 2.0 оно стало вызывать исключение безопасности: «System.Security.SecurityException: запрос разрешения типа« System.Web.AspNetHostingPermission, System, Version = 2.0.0.0 , Культура = нейтральная, PublicKeyToken = b77a5c561934e089 'не удалось. “.
После быстрого исследования Интернета мы смогли решить эту проблему, установив для параметра «Загрузить профиль пользователя» значение True в пуле приложений IIS 7.5. Это решение также упоминается здесь несколько раз в stackoverflow:
Однако мы не смогли найти причину, почему это должно быть правдой. Мы рассмотрели все изменения в новой версии (к счастью, их было всего несколько), но не нашли ничего подозрительного (нет доступа к реестру или временным данным, как предлагалось в некоторых статьях и т. Д.). Кто-нибудь может дать нам подсказку, когда приложению ASP.NET, размещенному в IIS 7.5, требуется установить для параметра «Загрузить профиль пользователя» значение True?
подробности:
- Пул приложений: .NET 2.0; Режим управляемого трубопровода - Классический; Удостоверение личности - учетная запись домена * 1024
- В IIS 6.0 (W2K3): старое и новое
версия приложения отлично работает
- В IIS 7.5 (W2K8-R2): старая версия
приложение работает отлично; новая версия
приложения повышает безопасность
исключение - оно начинает работать после
для параметра «Загрузить профиль пользователя» установлено значение True
Спасибо!
EDIT:
Мы наконец нашли причину этой проблемы! Наш администратор использовал другую технику для копирования новой версии приложения из промежуточной среды в рабочую среду. Он использовал веб-сервер в качестве посредника. После того, как вы загрузили архивные артефакты сборки zip-релиза в производственную среду, а затем распаковали файлы, они все равно были помечены как «заблокированные», так как они пришли с другого компьютера. См. Также https://superuser.com/questions/38476/this-file-came-from-another-computer-how-can-i-unblock-all-the-files-in-a. . Затем ASP.NET логически выполняет эти двоичные файлы с частичным доверием, а не с полным доверием, что фактически привело к упомянутым исключениям безопасности в нашем приложении .
Установка для параметра «Загрузить профиль пользователя» значения True исправила исключения безопасности как побочный эффект. Если для параметра «Загрузить профиль пользователя» установлено значение «Ложь», то наше приложение (не наш код, может быть, какая-то .NET BCL или внешняя сборка) пытается запросить основную информацию о каталоге «C: \ Windows \ System32 \ config \ systemprofile \ AppData \». Локальные \ Microsoft \ Windows \ Temporary Internet Files ", которым не разрешено удостоверение пула приложений:
- При полном доверии: доступ к этой операции запроса запрещен, исключений нет
- С частичным доверием: доступ, запрещенный для этой операции запроса, вызывает исключение безопасности
Если для параметра «Загрузить профиль пользователя» задано значение «Истина», то временный профиль в каталоге «Пользователи» создается каждый раз при запуске пула приложений. Затем наше приложение пытается запросить информацию о каталоге «Temporary Internet Files» этого профиля, которому разрешено удостоверение пула приложений. Таким образом, исключение не возникает даже при частичном доверии.
Действительно хороший сеанс устранения неполадок! :)