Asp.net身份 - 如何维护登录用户角色?

时间:2015-03-09 06:43:44

标签: c# asp.net angularjs asp.net-identity identity

我正在使用Angularjs项目并使用带有企业库的Asp.net身份自定义存储提供程序进行令牌身份验证。

实施自定义用户界面以创建帐户。

登录后,

[授权] 属性运行良好。我想限制特定用户的方法。

因此尝试实施 [授权(角色="管理员,用户")]

这里一个用户可以实际拥有两个角色。但根据系统,当用户登录时,我们会限制用户选择特定角色。

因此,在通过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();

我没有得到角色&#34;测试&#34;

在这里,我的运气不好,在声称中,除了角色=测试

之外,用户的所有角色

如何授权用户角色或维护此处登录..

1 个答案:

答案 0 :(得分:2)

我发现至少有三种解决方案可以解决您的问题:

  1. 使用声明转换过滤角色声明,以匹配用户选择的角色。您可以使用声明转换中间件,也可以在登录期间过滤声明(请注意,您在登录前不知道用户角色,之后过滤可能为时已晚)。 PRO 不一定需要会话状态; CON 用户无法在运行时选择。

  2. 将角色存储在会话中并针对该角色进行身份验证。当用户选择他的角色时,请确保检查角色声明。 PRO 用户可能会在不重新登录的情况下更改角色。 CON 需要会话状态(可能是农场环境中的问题)。

  3. 根本不做,我对此非常认真。为您的用户提供一个干净的界面,让他知道,他有什么作用,并使用区域和其他技术来分离问题。