Asp.Net核心身份-使用角色和缓存授权属性?

时间:2019-11-06 09:51:35

标签: asp.net-core asp.net-identity

我在ASP.Net Core中有一个简单的Web应用程序,具有ASP.Net core标识。我正在各种控制器上使用基于角色的授权,在我看来Authorize属性并未正确地选择对角色成员资格的更改。

比方说,我用authorize属性装饰控制器并指定一个角色,如下所示:

[Authorize(Roles = "TestRole")]

然后,我以没有该角色的用户身份登录。我尝试访问控制器,并且Authorize属性正确阻止我访问控制器-给我一个拒绝访问错误。

然后,我以编程方式将用户添加到TestRole(我在Web应用程序中构建了一个简单的用户管理GUI,可以在其中管理用户和角色)。根据{{​​1}}方法,该用户已成功添加到该角色中,如果我检查数据库中Identity表中的记录,一切看起来都会很好。但是,我仍然无法访问控制器-GetRolesAsync()属性似乎不知道用户现在处于该角色。角色信息似乎已缓存。如果我等待足够长的时间再尝试一次(可能几个小时),那么这似乎可以正常工作。如果我终止IIS Express进程并重新启动网站,则此操作将立即生效,表明角色信息已以某种方式被缓存。

我找不到任何明确表明角色信息确实已缓存的信息,或者如何禁用此信息。当我更改系统中用户的角色成员身份时,我需要立即将更改反映出来。

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

OK-多么典型。我一直在想办法解决这一问题,几天之后,我终于向SO提出了问题,我就找到了答案:)

  

默认情况下,ASP.Net Identity将用户的授权角色存储在内部   用户成功登录后的角色声明。这些声明存储在里面   Cookie,直到用户注销或关闭浏览器为止。

Is it possible to cache authorizations in ASP.NET MVC & Identity 2.0?