User.IsInRole对一个动作失败,但对另一个动作失败

时间:2017-02-21 15:42:47

标签: asp.net-mvc asp.net-mvc-4 authorization authorize-attribute

我已将自定义授权属性放入我的MVC应用程序,其中

if (!this.Roles.Split(',').Any(filterContext.HttpContext.User.IsInRole))

如果是,则会将您重定向到未经授权的身份。

我将此属性放在控制器级别的控制器上。

一个动作很好,在一个动作中,我未经授权。

角色系统中是否存在一些错误或问题?我已经知道注销并且可以强制某些缓存刷新或者其他东西,但是我使用的系统使用您的域凭据进行身份验证,因此无法注销。

我尝试重新启动应用程序池并删除我的会话cookie但没有任何效果。

之前有没有人遇到过这个特定问题,或者有一些指导可能会刷新与之相关的任何缓存(假设它是一个缓存问题)?

ETA:系统上的另一个用户给了自己控制器所需的角色,这两个动作对他来说都很好。所以也许我的用户有点被窃听。这是在UAT上调试比在我的本地机器上运行稍微复杂一点(工作正常)。

ETA2:我非常确定这是一个缓存问题,因为在查询字符串中使用?1 = 1的URL,它可以工作。我虽然无法使缓存无效。将角色分配给人员时,这可能是将来的问题。

1 个答案:

答案 0 :(得分:1)

首先,我们需要更多代码才能给你任何确定的答案。但是:

  1. 缓存可能成为一个问题。如果您使用OutputCache之类的内容,则应确保使用VaryByCustom并以某种方式在返回的自定义字符串中包含用户ID或其他识别令牌。

  2. 如果您要向用户添加角色,则必须先将用户注销并重新登录,否则授权无效。例如,在Identity中,您可以简单地使安全标记无效,这将导致用户被重新授权,更新自登录以来已发生更改的声明或角色等内容。