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.
我在 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.