Asp.net 身份 - 如何维护登录的用户角色?
Posted
技术标签:
【中文标题】Asp.net 身份 - 如何维护登录的用户角色?【英文标题】:Asp.net identity - How to maintain logged in user role? 【发布时间】:2015-05-10 06:45:18 【问题描述】:我正在使用 Angularjs 项目并使用带有企业库的 Asp.net 身份自定义存储提供程序进行令牌身份验证。
实现了自定义用户存储来创建帐户。
[Authorize] 属性在登录后效果很好。我想限制特定用户的方法。
于是尝试实现[Authorize(Roles="Admin,User")]。
这里一个用户实际上可以有两个角色。但是根据系统,当用户登录时,我们限制用户选择特定的角色。
所以,通过asp.net身份验证后,用户应该选择任何一个角色。
这是我的需要,
我想保留他选择的角色(我们将此概念视为模拟用户,但不完全是)。
或者,
需要在Authorize属性本身中实现。
我见过一些例子,比如我们可以添加身份声明。
但我只能在方法内部添加自定义声明,
GenerateUserIdentityAsync
在我的情况下,我需要在验证登录后添加声明。我已经完成了一些示例并实现了如下所示。
ClaimsIdentity identity = new ClaimsIdentity(DefaultAuthenticationTypes.ApplicationCookie);
identity.AddClaim(new Claim(ClaimTypes.Role, "Test"));
添加声明后,当我尝试获取声明以检查登录用户角色时,
List<Claim> claim = claims.Where(c => c.Type == ClaimTypes.Role).ToList();
我没有获得角色“测试”。
我倒霉的是,在声明中,我拥有用户的所有角色除了角色 = 测试
如何授权用户角色或保持登录在这里..
【问题讨论】:
您能说说投反对票的原因吗? 到目前为止您尝试过什么?您可以在这里充分利用基于声明的身份验证机制。 其实我是根据角色授权的。但有时用户拥有多个角色。我想允许具有一个角色的用户进入系统。在进入申请之前,他将被要求选择角色。在这种情况下,我需要解决方案。 我在 userIdentity.AddClaim(new Claim(ClaimTypes.Role, "Jeeva")); 中添加了当前用户角色。我可以在方法中得到那个细节。可以在 web api 操作中验证以了解当前登录的用户角色吗? 有没有教程可以用身份在asp.net web api中实现模拟? 【参考方案1】:对于您的问题,我看到至少三种解决方案:
使用声明转换过滤角色声明,以匹配用户选择的角色。您可以使用声明转换中间件,也可以在登录期间过滤声明(请注意,您在登录之前不知道用户角色,之后过滤可能为时已晚)。 PRO 不一定需要会话状态; CON 用户在运行时无法选择。
将角色存储在会话中并针对该角色进行身份验证。确保在用户选择他的角色时检查角色声明。 PRO 用户可能会更改角色而无需重新登录。 CON 需要会话状态(在农场环境中可能是一个问题)。
根本不要这样做,我对此非常认真。为您的用户提供一个干净的界面,让他知道他有什么角色,并使用区域和其他技术来分离关注点。
【讨论】:
以上是关于Asp.net 身份 - 如何维护登录的用户角色?的主要内容,如果未能解决你的问题,请参考以下文章
ASP.Net Core - 登录后如何等待用户身份立即可用?