MiniProfiler绕过我的授权过滤器

时间:2015-12-17 06:45:47

标签: asp.net-mvc mvc-mini-profiler

我有迷你探查器正在工作,但现在我试图通过设置{Profileer Security >>中描述的功能来限制访问http://miniprofiler.com/

MiniProfiler.Settings.Results_Authorize = IsUserAllowedToSeeMiniProfilerUI;
MiniProfiler.Settings.Results_List_Authorize = IsUserAllowedToSeeMiniProfilerUI;

我的IsUserAllowedToSeeMiniProfilerUI函数需要查看ClaimsPrincipal的结果,该结果由自定义全局注册的授权过滤器修改。

当我观看呼叫时,主要请求按预期授权,IsUserAllowedToSeeMiniProfilerUI返回true。但是,检索探查器结果(~/mini-profiler-resources/results~/mini-profiler-resources/results-index)的http请求会绕过我的全局授权过滤器,因此未针对该请求正确修改ClaimsPrincipal,并且IsUserAllowedToSeeMiniProfilerUI错误地返回{ {1}}由于这个原因。

我将mini-profiler的过滤器注册为false,并且还将web.config中的处理程序注册为

GlobalFilters.Filters.Add(new ProfilingActionFilter())

我的自定义授权过滤器已在Global.asax中注册,方法是将其添加为<system.webServer> <handlers> <add name="MiniProfiler" path="mini-profiler-resources/*" verb="*" type="System.Web.Routing.UrlRoutingModule" resourceType="Unspecified" preCondition="integratedMode" /> <!-- ... --> </handlers>

为什么迷你探查器会绕过我的授权过滤器?

1 个答案:

答案 0 :(得分:0)

GlobalFilters以MVC框架为中心。因此,默认情况下,全局注册的授权过滤器仅对mvc框架处理的请求生效 - 不适用于所有http请求。

MiniProfiler在单个类MiniProfilerHandler中实现其客户端结果,该类实现IRouteHandlerIHttpHandler。 (默认的探查器提供程序WebRequestProfilerProvider可确保注册MiniProfilerHandler的路由.UrlRoutingModule的web.config注册可确保实际路由迷你探查器URL。)

因此,迷你探查器直接处理探查器结果http请求作为通过路由定位的http处理程序 - 在正常的MVC请求流之外。

因此有必要处理例如自定义授权逻辑。考虑到任何授权过滤器(或其他操作过滤器)都不能保证已运行的IsUserAllowedToSeeMiniProfilerUI方法。但请注意,一旦启动了分析,似乎也会在某个阶段调用Results_Authorize,因此您还必须处理过滤器运行的情况。

另请参阅:Understanding the MVC Application Execution Process