Asp.net core Asp.Net核心标识-使用角色和缓存授权属性?

Asp.net core Asp.Net核心标识-使用角色和缓存授权属性?,asp.net-core,asp.net-identity,Asp.net Core,Asp.net Identity,我在ASP.Net Core中有一个简单的web应用程序,具有ASP.Net Core标识。我在各种控制器上使用基于角色的授权,在我看来,Authorize属性没有正确地获取角色成员资格的更改 假设我用authorize属性装饰一个控制器并指定一个角色,如下所示: [Authorize(Roles = "TestRole")] 然后,我以不属于该角色的用户身份登录。我尝试访问控制器,而Authorize属性正确阻止我访问控制器-给我一个拒绝访问错误 然后我以编程方式将用户添加到TestRole

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

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

[Authorize(Roles = "TestRole")]
然后,我以不属于该角色的用户身份登录。我尝试访问控制器,而Authorize属性正确阻止我访问控制器-给我一个拒绝访问错误

然后我以编程方式将用户添加到TestRole(我在web应用程序中构建了一个简单的用户管理GUI,可以在其中管理用户和角色)。根据
GetRolesAsync()
方法,用户已成功添加到角色,如果我检查数据库中标识表中的记录,一切看起来都很好。但是,我仍然无法访问控制器-
Authorize
属性似乎没有意识到用户现在处于此角色。角色信息似乎已被缓存。如果我在再次尝试之前等待足够长的时间(可能需要几个小时),那么这似乎可以正常工作。如果我关闭IIS express进程并重新启动网站,这会立即起作用,表明角色信息正在以某种方式被缓存

我无法找到任何明确声明角色信息确实已缓存的内容,也无法找到如何为此禁用该信息的内容。当我更改系统中用户的角色成员身份时,我需要立即反映这些更改


有什么想法吗?

好的-多么典型。这几天来,我一直在想这个问题,当我最终向SO发帖时,我找到了答案:)

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


正常-多典型。这几天来,我一直在想这个问题,当我最终向SO发帖时,我找到了答案:)

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