实现IAuthorizationFilter的过滤器的执行顺序

时间:2012-12-19 22:16:44

标签: asp.net-mvc ninject.web.mvc

我创建了一个名为PrincipalFilter的过滤器,实现了IAuthorizationFilter接口,以设置自定义IPrincipal和IIdentity。这是一个全局过滤器。 我通过Ninject(3.0)使用依赖注入,所以我在NinjectModule中注册我的过滤器:

this.BindFilter<PrincipalFilter>(FilterScope.Global, 0);

这很好用。至少那是我的想法。

有一个案例是问题所在。重要的事实是,当用户名已知时(用户可以被识别但未经过身份验证),我的自定义IIdentity属性IsAuthenticated并不总是返回true。防伪标记会出现问题。生成令牌并验证令牌时,当前身份不同:在一种情况下,这是mvc框架的通用标识,在另一种情况下,这是我的自定义标识。 2个标识返回相同的名称,但在某些情况下,不会为IsAuthenticate返回相同的值。用户的名称包含在防伪标记中;但如果身份未经过身份验证,则令牌不会使用身份的名称,而是使用空字符串。因此令牌无效,因为它包含的名称不是当前身份的名称。

当标识具有名称但未经过身份验证时,标记为ValidateAntiForgeryTokenAttribute的操作会出现问题。这是因为ValidateAntiForgeryTokenAttribute在我的自定义PrincipalFilter之前执行。

所以我的问题是如何确保我的自定义IAuthorizationFilter将在ValidateAntiForgeryTokenAttribute之前被执行? 我在注册过滤器时尝试使用FilterScope参数,但没有成功。

0 个答案:

没有答案