c# - 如何在 ASP.NET 身份框架中刷新当前经过身份验证的用户的角色更改成员身份?

标签 c# asp.net asp.net-mvc asp.net-identity asp.net-identity-2

我在 ASP MVC 5 应用程序中使用 ASP.NET 身份框架。在某些情况下,当前用户的角色成员身份正在发生变化,例如:

a) 用户支付了费用,因此它从 TrialUsers 中移除并添加到 Users(或任何类似的订阅更改,例如从 Standard 变为 Premium。

b) 对于站点管理员,有一个明确的 UI,他们可以在其中编辑角色成员资格。

编辑

与此同时,我发现了一个用例,它不仅带来不便,而且还存在安全漏洞,并且使授权无法使用。

c) 不识别角色成员资格的变化适用于身份框架的“记住我”功能。这意味着如果用户使用了记住我的功能(请不要建议我不要为我的用户提供此功能),那么角色成员资格更改将永远不会应用。 (内存到期)这意味着我不能有效地撤销任何成员(member)资格。这意味着我不能使用授权子系统(比如我的 Controller 或操作方法上的属性),我们又回到了石器时代:if(...)

结束编辑

所有更改都是通过使用提供的标准 API 完成的:

UserManager.AddToRolesAsync(...);

UserManager.RemoveFromRolesAsync(...);

似乎授权子系统和/或身份子系统直到用户下次登录时才识别出变化。特别是在场景a)中要求付费用户退出并登录非常不方便。据我所知ASP MVC 授权系统在没有注销->登录的情况下不会检测到角色更改。

请注意,我知道某些授权系统(如 Windows)以这种方式工作。仍然希望身份框架中有一个解决方案来跳过强制用户注销->登录。

是否有任何解决方法,或者我错过了什么?

最佳答案

只需重新登录用户即可重建用户 cookie:

SignInManager.SignIn(user, false, false);

关于c# - 如何在 ASP.NET 身份框架中刷新当前经过身份验证的用户的角色更改成员身份?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31311455/

相关文章:

c# - 使用表达式在 EF4 中渴望加载多对多?

c# - 在 ASP.NET 转发器控件中动态分配用户控件中的属性

c# - 如何跟踪 Entity Framework 中更新了哪些实体

c# - .NET 中 XPATH 中的 id()

c# - 使用 itextsharp 在 pdf 文件中画线的问题

javascript - 在 DropDownList SelectedIndexChanged 事件上调用 JavaScript 函数 :

javascript - 当后端正在处理某些事情时,如何添加 "Loading icon"并使背景变暗?

c# - 覆盖静态方法

asp.net-mvc - 如何使用 MVC Web Api 内容服务器和 Android 最终用户 apk 实现 OWIN 身份验证服务器

javascript - 就 JavaScript promise 和 C# 异步等待而言,什么是状态机?