我正在使用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; 。
在这里,我的运气不好,在声称中,除了角色=测试
之外,用户的所有角色如何授权用户角色或维护此处登录..
答案 0 :(得分:2)
我发现至少有三种解决方案可以解决您的问题:
使用声明转换过滤角色声明,以匹配用户选择的角色。您可以使用声明转换中间件,也可以在登录期间过滤声明(请注意,您在登录前不知道用户角色,之后过滤可能为时已晚)。 PRO 不一定需要会话状态; CON 用户无法在运行时选择。
将角色存储在会话中并针对该角色进行身份验证。当用户选择他的角色时,请确保检查角色声明。 PRO 用户可能会在不重新登录的情况下更改角色。 CON 需要会话状态(可能是农场环境中的问题)。
根本不做,我对此非常认真。为您的用户提供一个干净的界面,让他知道,他有什么作用,并使用区域和其他技术来分离问题。