Использование модуля разогрева IIS 7.5 с ASP.NET MVC AuthorizeAttribute - PullRequest
4 голосов
/ 21 февраля 2011

Я создал контроллер в своем приложении ASP.NET MVC для обработки разогрева / инициализации приложения (т. Е. Начальной загрузки клиентских прокси-серверов веб-службы и других действий, которые первоначально могут занимать значительную часть времени).Чтобы вызвать контроллер WarmUp, я использую модуль разогрева IIS 7 / 7.5 для отправки запроса при каждом запуске пула приложений.

Я не хочу, чтобы все пользователи могли выполнять действия контроллера WarmUpпоэтому я украсил контроллер атрибутом [Authorize].Я даже создал в своем домене группу, в которой содержатся пользователи, которым разрешено выполнять разминочные действия, и добавил эту группу в качестве роли для атрибута authorize (т. Е. [Authorize(Roles = @"MyDomain\AppWarmUp")]).

Если яВручную вызовите контроллер WarmUp с помощью веб-браузера и предоставьте правильные учетные данные, все работает как положено.Однако при использовании модуля прогрева IIS, даже когда я предоставляю надлежащие учетные данные, в журнале событий приложений появляются предупреждения, указывающие, что аутентификация не удалась.

Если я указываю только тип и имя пользователя дляПользовательский контекст модуля прогрева, я получаю ProviderException с сообщением

Метод поддерживается только в том случае, если параметр имени пользователя совпадает с именем пользователя в текущей идентификации Windows.

Если я укажу имя пользователя и пароль / токен, я получу ArgumentException со следующим сообщением:

Недопустимый токен для олицетворения - его нельзя дублировать.

Если я удаляю атрибут [Authorize] из моего контроллера, то запрос модуля прогрева проходит без каких-либо исключений.Однако я бы хотел избежать случая, когда все пользователи могут получить доступ к контроллеру WarmUp, если это возможно.Может ли это быть ошибкой в ​​модуле прогрева или я что-то упустил?

Стоит также отметить, что я также пробовал использовать функцию автозапуска приложений ASP.NET 4.0, но это не так.кажется, имеет тот же эффект, что и фактический запрос к приложению.Есть ли другие альтернативы для рассмотрения?

1 Ответ

1 голос
/ 30 мая 2012

Вероятно, проблема связана с тем, что учетная запись пользователя используется для выполнения запросов WarmUp на вашем сайте в IIS. Обязательно измените настройку Identity в дополнительных настройках пула приложений, а также учетные данные физического пути в дополнительных настройках веб-сайта в IIS. Я не могу вспомнить, какой из них будет работать, поэтому попробуйте либо / или / оба.

Когда вы вручную отправляете запросы из браузера, вы подражаете учетной записи. Когда IIS делает запрос через модуль WarmUp, он использует одну из учетных записей, указанных выше.

...