Событие FormsAuthenticationModule Authenticate не запускается при использовании ASP.NET MVC - PullRequest
4 голосов
/ 31 января 2012

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

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

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

EDIT

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

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

Есть предложения?

Ответы [ 3 ]

2 голосов
/ 01 февраля 2012

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

<system.webServer>
    ....
    <modules runAllManagedModulesForAllRequests="true">
    ....
</system.webServer>
2 голосов
/ 01 февраля 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"/>
0 голосов
/ 31 января 2012

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

<location path="[path]"> 
   <system.web>
     <authorization>
        <allow users="[username]" roles="[role]"/>
        <deny users="*"/>
      </authorization>
   </system.web>
</location> 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...