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

Asp.Net Core Identity - Authorize attribute with roles and caching?

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

假设我用 authorize 属性装饰了一个控制器并指定了一个角色,就像这样:

[Authorize(Roles = "TestRole")]

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

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

我没能找到任何明确说明确实缓存了角色信息或如何禁用它的内容。当我更改系统中用户的角色成员资格时,我需要立即反映更改。

有什么想法吗?

好的 - 多么典型。几天来我一直在努力解决这个问题,一旦我终于 post 向 SO 提出问题,我就找到了答案:)

By default, ASP.Net Identity stores user's authorized roles inside Role Claim after user successful login. Those claims are stored inside cookie until user logout or close the browser.