FormsAuthenticationModule使用ASP.NET MVC验证事件未触发

时间:2012-01-31 11:23:30

标签: asp.net asp.net-mvc iis forms-authentication iis-7.5

我们正在使用HttpModule挂钩到FormsAuthenticationModule并订阅Authenticate事件。当我们使用Web表单时,此事件将在模块中触发。当我们使用MVC时,此事件未触发。

我尝试使用控制器上的[Authorize]属性和web.config中的位置(即使这不是最佳做法)来尝试触发此事件,但它仍然没有。

使用Cassini网络服务器时会触发该事件,但不会在IIS 7.5或IIS Express上触发。我们使用.NET 3.5运行ASP.NET MVC 2

修改

当我们请求.aspx或.ashx文件时,将触发Authentication事件。如果我们请求无扩展名文件或.css或.js,它也不会触发。

新的ASP.NET MVC应用程序将为每个请求的文件触发此事件。

有什么建议吗?

3 个答案:

答案 0 :(得分:2)

我们的web.config缺少来自system.webServer中的modules元素的 runAllManagedModulesForAllRequests =“true”。添加完成后,所有Web请求都会从FormsAuthenticationModule接收Authorization事件。

<system.webServer>
    ....
    <modules runAllManagedModulesForAllRequests="true">
    ....
</system.webServer>

答案 1 :(得分:2)

导航到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"/>

答案 2 :(得分:0)

我认为这不是解决问题的最佳方法,但我也使用了MVC和formpages的组合,并在web.config中设置了所有授权。

<location path="[path]"> 
   <system.web>
     <authorization>
        <allow users="[username]" roles="[role]"/>
        <deny users="*"/>
      </authorization>
   </system.web>
</location>