使用 Fluent Security,我已经使用 DenyAnonymousAccess、DenyAuthenticationAccess 和 RequireRole 配置了网站访问。但是,由于HandleSecurityAttribute
不是授权过滤器,所有要处理的逻辑都DenyAnonymousAccessPolicyViolation
只能在授权过滤器之后执行,例如ValidateAntiForgeryToken
.
这意味着如果当前用户的身份验证票证超时,则任何修饰的操作ValidateAntiForgeryToken
都会抛出异常,因为令牌不是为匿名用户创建的。
那么有没有办法解决这个问题?我目前正在研究两种解决方案:
- 创建我自己的授权过滤器以执行
HandleSecurityAttribute
安全性的确切功能。 - 使用全局
Authorize
文件管理器处理身份验证并将角色/其他访问策略留给 FluentSecurity。
更新:
我在 github 上查看了一个演示,它的用户名和密码是 dev1 和 devdev。我将超时表单身份验证设置为 1 分钟。因此,如果您登录并等待一分钟,然后单击注销,您将获得未为匿名用户创建的令牌。在普通的 MVC 中,这不会发生,因为 [Authorize] 在 [ValidateAntiForgeryToken] 之前运行,这会将用户重定向回登录屏幕。