Событие проверки подлинности FormsAuthenticationModule не запускается при использовании ASP.NET MVC

Мы используем HttpModule для подключения к FormsAuthenticationModule и подписки на событие Authenticate. Когда мы используем веб-формы, это событие возникает в модуле. Когда мы используем MVC, это событие не запускается.

Я попытался использовать атрибут [Authorize] для контроллеров и расположение в web.config (хотя это не лучшая практика), чтобы попытаться запустить это событие, но это все еще не работает.

Событие запускается при использовании веб-сервера Cassini, но не запускается в IIS 7.5 или IIS Express. Мы запускаем ASP.NET MVC 2 с использованием .NET 3.5.

РЕДАКТИРОВАТЬ

Событие аутентификации запускается, когда мы запрашиваем файл .aspx или .ashx. Если мы запрашиваем файл без расширения или .css или .js, он тоже не срабатывает.

Новое приложение ASP.NET MVC будет запускать это событие для каждого запрошенного файла.

Какие-либо предложения?


person Joel Cunningham    schedule 31.01.2012    source источник
comment
Правильно ли работает проверка подлинности с помощью форм в MVC?   -  person Max Toro    schedule 31.01.2012
comment
@MaxToro да. Если я уже перешел на страницу aspx, пользовательский HttpHandlder уже будет запущен и настроит файл cookie форм.   -  person Joel Cunningham    schedule 01.02.2012


Ответы (3)


В нашем web.config отсутствовал runAllManagedModulesForAllRequests = "true" из элемента modules в system.webServer. Как только это было добавлено, все веб-запросы получают событие авторизации от FormsAuthenticationModule.

<system.webServer>
    ....
    <modules runAllManagedModulesForAllRequests="true">
    ....
</system.webServer>
person Joel Cunningham    schedule 01.02.2012
comment
@AmarPalsapure Я бы хотел, но SO не позволяет вам делать это в течение дня. - person Joel Cunningham; 01.02.2012
comment
хммм, я этого не знал, пока не задавал вопросов. - person Amar Palsapure; 01.02.2012

Переход на страницу aspx не проверяет, работает ли проверка подлинности с помощью форм в MVC, вам необходимо перейти к маршруту. Я видел твой ответ и имел в виду именно это. Вместо неэффективного runAllManagedModulesForAllRequests="true" я предлагаю удалить предварительное условие managedHandler:

     <remove name="FormsAuthentication"/>
     <add name="FormsAuthentication" preCondition="" type="System.Web.Security.FormsAuthenticationModule"/>

     <remove name="DefaultAuthentication"/>
     <add name="DefaultAuthentication" preCondition="" type="System.Web.Security.DefaultAuthenticationModule"/>

     <remove name="RoleManager"/>
     <add name="RoleManager" preCondition="" type="System.Web.Security.RoleManagerModule"/>

     <remove name="UrlAuthorization"/>
     <add name="UrlAuthorization" preCondition="" type="System.Web.Security.UrlAuthorizationModule"/>

     <remove name="UrlRoutingModule-4.0"/>
     <add name="UrlRoutingModule-4.0" preCondition="runtimeVersionv4.0" type="System.Web.Routing.UrlRoutingModule"/>
person Max Toro    schedule 01.02.2012
comment
Спасибо за этот ответ. Многие люди рекомендуют отключить runAllManagedModulesForAllRequests, но не перечисляют эти модули, которые необходимы для работы большинства сайтов MVC. - person Andrew Harry; 02.10.2012

Я не думаю, что это лучший способ решить эту проблему, но я также использую комбинацию MVC и страниц форм и устанавливаю всю авторизацию в web.config

<location path="[path]"> 
   <system.web>
     <authorization>
        <allow users="[username]" roles="[role]"/>
        <deny users="*"/>
      </authorization>
   </system.web>
</location> 
person DerDee    schedule 31.01.2012
comment
Я пробовал это, чтобы увидеть, помогло ли это, но это не помогло. Такая настройка безопасности для страниц MVC также представляет собой угрозу безопасности. - person Joel Cunningham; 01.02.2012
comment
Только для личной информации, какой риск безопасности может возникнуть при использовании этого метода? Интересно, почему это не работает для вас. - person DerDee; 01.02.2012