如果runAllManagedModulesForAllRequests =“True”,则避免在asp.net中进行基本身份验证

时间:2010-12-18 11:22:08

标签: asp.net caching httpmodule basic-authentication

我们有一个模块可以对内部重定向到真正的aspx页面。他还负责直接向客户端提供缓存/压缩的HTML / txt / cs / js输出。

以下是模块部分的web.config外观:

<modules runAllManagedModulesForAllRequests="True">      
  <remove name="RequestInterceptor" />
  <add type="Lib.Request.RequestInterceptor" name="RequestInterceptor" />
  <remove name="Session" />
  <add type="System.Web.SessionState.SessionStateModule" name="Session" />
</modules> 

IIS7上启用了基本身份验证。当第一个访问者访问站点登录弹出窗口并且他被正确认证,然后他访问的页面被缓存。 当下一个访问者出现身份验证弹出窗口没有显示时,除非他访问前一个访问者未访问过的页面(未缓存的页面)。缓存过期后,身份验证将再次起作用,直到页面内容被缓存为止,等等。

有没有办法强制每位访问者进行身份验证?也许我们需要在web.config的模块部分添加基本认证模块(怎么做)?

提前致谢。 干杯

2 个答案:

答案 0 :(得分:2)

在搜索相关问题的答案时,我发现了这篇文章:

Don't use runAllManagedModulesForAllRequests="true" when getting your MVC routing to work

  

制作你的模块部分似乎是一种常见的建议   web.config说。在   事实上,解决路由问题是一件非常激烈的事情   并具有可能导致错误的全局影响。 ......这很高兴   建议修复可能会导致其他问题。这些问题都来自于   使所有注册的HTTP模块在每个请求上运行的形式,   不只是托管请求(例如.aspx)。这意味着模块将继续运行   曾经.jpg .gif .css .html .pdf等。

而且,虽然我没有在我的WCF REST服务中使用MVC,但它确实解决了我的(其他)问题,并且可能需要这个针对runAllManagedModulesForAllRequests不当或过度使用的建议。

答案 1 :(得分:1)

因为httpmodule拦截了每个请求,所以服务器无法为静态文件,动态文件以及其他安全的身份验证映射适当的处理程序。