1

使用 Fluent Security,我已经使用 DenyAnonymousAccess、DenyAuthenticationAccess 和 RequireRole 配置了网站访问。但是,由于HandleSecurityAttribute不是授权过滤器,所有要处理的逻辑都DenyAnonymousAccessPolicyViolation只能在授权过滤器之后执行,例如ValidateAntiForgeryToken.

这意味着如果当前用户的身份验证票证超时,则任何修饰的操作ValidateAntiForgeryToken都会抛出异常,因为令牌不是为匿名用户创建的。

那么有没有办法解决这个问题?我目前正在研究两种解决方案:

  1. 创建我自己的授权过滤器以执行HandleSecurityAttribute安全性的确切功能。
  2. 使用全局Authorize文件管理器处理身份验证并将角色/其他访问策略留给 FluentSecurity。

更新:

我在 github 上查看了一个演示,它的用户名和密码是 dev1 和 devdev。我将超时表单身份验证设置为 1 分钟。因此,如果您登录并等待一分钟,然后单击注销,您将获得未为匿名用户创建的令牌。在普通的 MVC 中,这不会发生,因为 [Authorize] 在 [ValidateAntiForgeryToken] 之前运行,这会将用户重定向回登录屏幕。

4

1 回答 1

1

我对此没有任何问题。确保将HandleSecurityAttribute放在过滤器列表的首位!

GlobalFilters.Filters.Add(new HandleSecurityAttribute(), 0);
于 2013-03-21T11:48:14.760 回答