我在ASP.Net Core中有一个简单的web应用程序,带有ASP.Net核心标识。我在各种控制器上使用基于角色的授权,在我看来,Authorize
属性没有正确地处理角色成员身份的更改。
假设我用authorize属性装饰一个控制器,并指定一个角色,如下所示:
[Authorize(Roles = "TestRole")]
然后我以不属于该角色的用户身份登录。我试图访问控制器,但Authorize属性正确地阻止我访问控制器-给了我一个拒绝访问的错误。
然后,我以编程方式将用户添加到TestRole中(我在web应用程序中构建了一个简单的用户管理GUI,可以在其中管理用户和角色(。根据GetRolesAsync()
方法,用户已成功添加到角色中,如果我检查DB中Identity表中的记录,一切看起来都很好。然而,我仍然无法访问控制器——Authorize
属性似乎没有意识到用户现在扮演这个角色。角色信息似乎已缓存。如果我在再次尝试之前等待足够长的时间(可能需要几个小时(,那么这似乎是正确的。如果我终止IIS express进程并重新启动网站,这将立即生效,这表明角色信息正在以某种方式缓存。
我找不到任何明确说明Role信息确实被缓存的内容,也找不到如何禁用它。当我更改系统中用户的角色成员身份时,我需要立即反映这些更改。
有什么想法吗?
好-非常典型。几天来,我一直在努力思考这个问题,当我最终向SO发布问题时,我找到了答案:(
默认情况下,ASP.Net Identity将用户的授权角色存储在用户成功登录后的角色声明。这些索赔都存储在里面cookie,直到用户注销或关闭浏览器。
是否可以在ASP.NET MVC&Identity 2.0?