为什么不能覆盖AuthorizeAttribute的OnAuthorization()?

时间:2013-04-15 02:30:56

标签: asp.net-mvc asp.net-mvc-3 asp.net-mvc-4

我已阅读the AuthorizeAttribute's source code,代码评论说:

// Since we're performing authorization at the action level, the authorization code runs
// after the output caching module. In the worst case this could allow an authorized user
// to cause the page to be cached, then an unauthorized user would later be served the
// cached page. We work around this by telling proxies not to cache the sensitive page,
// then we hook our custom authorization code into the caching mechanism so that we have
// the final say on whether a page should be served from the cache.

现在我要确认此评论。这是真的吗?什么是“最坏的情况”?我该怎么做呢?

更新

我重写了OnAuthorization(),没有过滤OutputCacheAttribute。

然后在需要授权的操作上放置一个[OutputCache(Duration = 30000,VaryByParam =“*”)],但是在先前授权的用户登录后,它没有按预期工作,后一个用户还需要授权。或者我的问题是“如何使OutputCacheAttribute工作?”

UPDATE2:

从互联网上搜索后,我找到了原因。在.NET Framework 2.0.50727.4209或更高版本上,如果Page的响应包含cookie,则OutputCache将不起作用。

显然,ASP.NET MVC基于较新版本的.NET Framework,使用ASP.NET Forms Authenticate,授权页面每次都会将经过身份验证的票据作为cookie(HttpOnly)响应,并且不会被缓存。

这很奇怪,似乎缓存问题永远不会发生在ASP.NET MVC应用程序的授权页面上。为什么AuthorizeAttribute需要处理它? http://androidyou.blogspot.com/2012/10/aspnet-output-cache-not-working-and.html

UPDATE3

我的错误,正常的Forms Authenticate不会每次都将经过身份验证的票据作为cookie响应,但是我的自定义AuthorizeAttribute会这样做,所以毫无疑问,正常的AuthrizeAttribute会处理缓存问题。

0 个答案:

没有答案