Подтвердить что ты не робот

Исключения безопасности в ASP.NET и Load User Profile в IIS 7.5

После развертывания новой версии нашего приложения ASP.NET 2.0 он начал поднимать исключение безопасности: "System.Security.SecurityException: запрос на разрешение типа" System.Web.AspNetHostingPermission, System, Version = 2.0.0.0, Culture = neutral, PublicKeyToken = b77a5c561934e089 "не удалось".

После быстрых исследований в Интернете мы смогли разрешить это isse, установив "Load User Profile" в True в пуле приложений IIS 7.5. Это решение также упоминается здесь несколько раз в stackoverflow:

Однако нам не удалось найти причину, почему это должно быть правдой. Мы рассмотрели все изменения в новой версии (с радостью было только несколько), но не обнаружили ничего подозрительного (без доступа к реестру или временным данным, как предложено некоторые статьи и т.д.). Может ли кто-нибудь дать нам подсказки, если для приложения ASP.NET, размещенного в IIS 7.5, для параметра "Загрузить профиль пользователя" установлено значение "Истина" ?

Подробнее:

  • Пул приложений:.NET 2.0; Управляемый режим трубопровода - классический; Identity - пользовательская учетная запись домена
  • В IIS 6.0 (W2K3): старые и новые версия приложения отлично работает
  • В IIS 7.5 (W2K8-R2): старая версия приложение работает нормально; новая версия приложения повышает безопасность исключение - он начинает работать после установка "Загрузить профиль пользователя" на "Истина"

Спасибо!

EDIT: Мы, наконец, нашли причину этой проблемы! Наш администратор использовал другую технику для копирования новой версии приложения из промежуточной среды в производственную среду. Он использовал веб-сервер в качестве посредника. После загрузки zip-релиза сборку артефактов в производственную среду, а затем распаковку файлов они по-прежнему помечены как "заблокированные", потому что они появились с разных компьютеров. См. Также https://superuser.com/info/38476/this-file-came-from-another-computer-how-can-i-unblock-all-the-files-in-a. ASP.NET затем логически выполняет эти двоичные файлы в частичном доверии вместо полного доверия и фактически вызывает упомянутые исключения безопасности в нашем приложении.

Настройка "Загрузить профиль пользователя" в значение True зафиксировала исключения безопасности как побочный эффект. Если для параметра "Загрузить профиль пользователя" установлено значение "False", наше приложение (а не наш код, возможно,.NET BCL или внешняя сборка) пытается запросить основную информацию о каталоге "C:\Windows\System32\config\systemprofile\AppData\Локальные\Microsoft\Windows\Temporary Internet Files", которым не разрешен идентификатор пула приложений:

  • С полным доверием: доступ, запрещенный к этой операции запроса, не вызывает никаких исключений.
  • С частичным доверием: доступ, запрещенный к этой операции запроса, вызывает исключение безопасности

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

Действительно приятная сессия по устранению неполадок!:)

4b9b3361

Ответ 1

Еще один пример, когда параметр "Загрузить профиль пользователя" может помочь вам использовать временные файлы. Иногда это использование может быть косвенным. Например, SQL Express может сделать это в некоторых ситуациях.

Итак, мой совет. Отключите "Загрузить профиль пользователя" и проверьте% TEMP%. Затем попробуйте указать учетную запись домена, используемую для пула приложений, для полного доступа (или изменения доступа) к каталогу из% TEMP%. Вероятно, это исправить вашу проблему.

Еще один совет - использование Process Monitor (см. http://technet.microsoft.com/en-us/sysinternals/bb896645.aspx) для локали, какие части пользовательского профиля будут использоваться (или получать "access denied" ) в тот момент, когда вы получаете "System.Security.SecurityException: запрос на разрешение исключения типа System.Web.AspNetHostingPermission".

Ответ 2

Я также столкнулся с той же проблемой и смог решить проблему, установив load user profile = true. Однако я вернул профиль пользователя load = false и перезапустил пул приложений, но теперь я не получаю никакого исключения. Я прошел через все сообщения relavents в stackoverflow, а также на страницах форума Asp.net и iis.

Ответ 3

Другая область, в которой может загружаться LoadUserProfile, - это настройка надежной привязки MSMQ в WCF. Если пул приложений запущен под доверенной учетной записью, это не будет загружать идентификатор SID, если для параметра профиля пользователя пула приложений не установлено значение true, и, следовательно, проверка подлинности завершится неудачно.